__GNU_CXX::RB_TREE(3cxx)

🌸 NAME 🌸

okay so this is the 3cxx manual page for __gnu_cxx::rb_tree< _Key, _Value, _KeyOfValue, _Compare, _Alloc >, bestie. That's the whole name, and yes, it's giving very template-heavy main character energy. πŸ’…

✨ SYNOPSIS ✨

#include <rb_tree>

It inherits from std::_Rb_tree< _Key, _Val, _KeyOfValue, _Compare, _Alloc >. Not me inheriting the whole base class and still showing up with my own page. 😭


πŸ’– Public Types πŸ’–

  • __same_value_type β€” a template alias, and the exact spell is:
template<typename _Iter > using __same_value_type = is_same< value_type,
           typename iterator_traits< _Iter >::value_type >
  • _Base β€” typedef std::_Rb_tree< _Key, _Value, _KeyOfValue, _Compare, _Alloc > _Base
  • _Compatible_tree β€” template<typename _Compare2 > using _Compatible_tree = _Rb_tree< _Key, _Val, _KeyOfValue, _Compare2, _Alloc >
  • allocator_type β€” typedef _Base::allocator_type allocator_type
  • const_iterator β€” typedef _Rb_tree_const_iterator< value_type > const_iterator
  • const_pointer β€” typedef const value_type * const_pointer
  • const_reference β€” typedef const value_type & const_reference
  • const_reverse_iterator β€” typedef std::reverse_iterator< const_iterator > const_reverse_iterator
  • difference_type β€” typedef ptrdiff_t difference_type
  • insert_return_type β€” using insert_return_type = _Node_insert_return< __conditional_t< is_same_v< _Key, _Val >, const_iterator, iterator >, node_type >
  • iterator β€” typedef _Rb_tree_iterator< value_type > iterator
  • key_type β€” typedef _Key key_type
  • node_type β€” using node_type = _Node_handle< _Key, _Val, _Node_allocator >
  • pointer β€” typedef value_type * pointer
  • reference β€” typedef value_type & reference
  • reverse_iterator β€” typedef std::reverse_iterator< iterator > reverse_iterator
  • size_type β€” typedef size_t size_type
  • value_type β€” typedef _Val value_type

πŸŽ€ Public Member Functions πŸŽ€

okay bestie, here's every public member function, in order, no skips, no cap. If the original didn't give a blurb, I'm not inventing one β€” signature only, periodt. 🫢

  • rb_tree (const _Compare &__comp=_Compare(), const allocator_type &__a=allocator_type())
  • bool __rb_verify () const
  • template<typename _Iterator > void _M_assign_equal (_Iterator, _Iterator)
  • template<typename _Iterator > void _M_assign_unique (_Iterator, _Iterator)
  • template<typename _Kt , typename _Req = __has_is_transparent_t<_Compare, _Kt>> size_type _M_count_tr (const _Kt &__k) const
  • template<typename... _Args> iterator _M_emplace_equal (_Args &&... __args)
  • template<typename... _Args> auto _M_emplace_equal (_Args &&... __args) -> iterator
  • template<typename... _Args> iterator _M_emplace_hint_equal (const_iterator __pos, _Args &&... __args)
  • template<typename... _Args> auto _M_emplace_hint_equal (const_iterator __pos, _Args &&... __args) -> iterator
  • template<typename... _Args> iterator _M_emplace_hint_unique (const_iterator __pos, _Args &&... __args)
  • template<typename... _Args> auto _M_emplace_hint_unique (const_iterator __pos, _Args &&... __args) -> iterator
  • template<typename... _Args> pair< iterator, bool > _M_emplace_unique (_Args &&... __args)
  • template<typename... _Args> auto _M_emplace_unique (_Args &&... __args) -> pair< iterator, bool >
  • template<typename _Kt , typename _Req = __has_is_transparent_t<_Compare, _Kt>> pair< iterator, iterator > _M_equal_range_tr (const _Kt &__k)
  • template<typename _Kt , typename _Req = __has_is_transparent_t<_Compare, _Kt>> pair< const_iterator, const_iterator > _M_equal_range_tr (const _Kt &__k) const
  • template<typename _Kt , typename _Req = __has_is_transparent_t<_Compare, _Kt>> iterator _M_find_tr (const _Kt &__k)
  • template<typename _Kt , typename _Req = __has_is_transparent_t<_Compare, _Kt>> const_iterator _M_find_tr (const _Kt &__k) const
  • pair< _Base_ptr, _Base_ptr > _M_get_insert_equal_pos (const key_type &__k)
  • pair< _Base_ptr, _Base_ptr > _M_get_insert_hint_equal_pos (const_iterator __pos, const key_type &__k)
  • pair< _Base_ptr, _Base_ptr > _M_get_insert_hint_unique_pos (const_iterator __pos, const key_type &__k)
  • pair< _Base_ptr, _Base_ptr > _M_get_insert_unique_pos (const key_type &__k)
  • const _Node_allocator & _M_get_Node_allocator () const noexcept
  • _Node_allocator & _M_get_Node_allocator () noexcept
  • template<typename _Arg > iterator _M_insert_equal (_Arg &&__x)
  • template<typename _Arg > iterator _M_insert_equal_ (const_iterator __pos, _Arg &&__x)
  • template<typename _Arg , typename _NodeGen > iterator _M_insert_equal_ (const_iterator __pos, _Arg &&__x, _NodeGen &)
  • template<typename _InputIterator > __enable_if_t< __same_value_type< _InputIterator >::value > _M_insert_range_equal (_InputIterator __first, _InputIterator __last)
  • template<typename _InputIterator > __enable_if_t<!__same_value_type< _InputIterator >::value > _M_insert_range_equal (_InputIterator __first, _InputIterator __last)
  • template<typename _InputIterator > __enable_if_t< __same_value_type< _InputIterator >::value > _M_insert_range_unique (_InputIterator __first, _InputIterator __last)
  • template<typename _InputIterator > __enable_if_t<!__same_value_type< _InputIterator >::value > _M_insert_range_unique (_InputIterator __first, _InputIterator __last)
  • template<typename _Arg > pair< typename _Rb_tree< _Key, _Val, _KeyOfValue, _Compare, _Alloc >::iterator, bool > _M_insert_unique (_Arg &&__v)
  • template<typename _Arg > pair< iterator, bool > _M_insert_unique (_Arg &&__x)
  • template<typename _Arg > iterator _M_insert_unique_ (const_iterator __pos, _Arg &&__x)
  • template<typename _Arg , typename _NodeGen > iterator _M_insert_unique_ (const_iterator __pos, _Arg &&__x, _NodeGen &)
  • template<typename _Kt , typename _Req = __has_is_transparent_t<_Compare, _Kt>> iterator _M_lower_bound_tr (const _Kt &__k)
  • template<typename _Kt , typename _Req = __has_is_transparent_t<_Compare, _Kt>> const_iterator _M_lower_bound_tr (const _Kt &__k) const
  • template<typename _Compare2 > void _M_merge_equal (_Compatible_tree< _Compare2 > &__src) noexcept β€” merges from a compatible container into one with equivalent keys. slay. πŸ’–
  • template<typename _Compare2 > void _M_merge_unique (_Compatible_tree< _Compare2 > &__src) noexcept β€” merges from a compatible container into one with unique keys. iconic.
  • iterator _M_reinsert_node_equal (node_type &&__nh) β€” re-inserts an extracted node.
  • iterator _M_reinsert_node_hint_equal (const_iterator __hint, node_type &&__nh) β€” re-inserts an extracted node.
  • iterator _M_reinsert_node_hint_unique (const_iterator __hint, node_type &&__nh) β€” re-inserts an extracted node.
  • insert_return_type _M_reinsert_node_unique (node_type &&__nh) β€” re-inserts an extracted node.
  • template<typename _Kt , typename _Req = __has_is_transparent_t<_Compare, _Kt>> iterator _M_upper_bound_tr (const _Kt &__k)
  • template<typename _Kt , typename _Req = __has_is_transparent_t<_Compare, _Kt>> const_iterator _M_upper_bound_tr (const _Kt &__k) const
  • const_iterator begin () const noexcept
  • iterator begin () noexcept
  • void clear () noexcept
  • size_type count (const key_type &__k) const
  • bool empty () const noexcept
  • const_iterator end () const noexcept
  • iterator end () noexcept
  • pair< iterator, iterator > equal_range (const key_type &__k)
  • pair< const_iterator, const_iterator > equal_range (const key_type &__k) const
  • size_type erase (const key_type &__x)
  • _GLIBCXX_ABI_TAG_CXX11 iterator erase (const_iterator __first, const_iterator __last)
  • _GLIBCXX_ABI_TAG_CXX11 iterator erase (const_iterator __position)
  • _GLIBCXX_ABI_TAG_CXX11 iterator erase (iterator __position)
  • node_type extract (const key_type &__k) β€” extracts a node. get that node out of here. πŸ’…
  • node_type extract (const_iterator __pos) β€” extracts a node. same energy.
  • iterator find (const key_type &__k)
  • const_iterator find (const key_type &__k) const
  • allocator_type get_allocator () const noexcept
  • _Compare key_comp () const
  • iterator lower_bound (const key_type &__k)
  • const_iterator lower_bound (const key_type &__k) const
  • size_type max_size () const noexcept
  • const_reverse_iterator rbegin () const noexcept
  • reverse_iterator rbegin () noexcept
  • const_reverse_iterator rend () const noexcept
  • reverse_iterator rend () noexcept
  • size_type size () const noexcept
  • void swap (_Rb_tree &__t) noexcept(/*conditional */)
  • iterator upper_bound (const key_type &__k)
  • const_iterator upper_bound (const key_type &__k) const

πŸ¦‹ Protected Types πŸ¦‹

  • typedef _Rb_tree_node_base * _Base_ptr
  • typedef const _Rb_tree_node_base * _Const_Base_ptr
  • typedef const _Rb_tree_node< _Val > * _Const_Link_type
  • typedef _Rb_tree_node< _Val > * _Link_type

🌸 Protected Member Functions 🌸

again, original gave no extra blurbs here, so we're keeping it signature-only and cute. πŸŽ€

  • _Const_Link_type _M_begin () const noexcept
  • _Link_type _M_begin () noexcept
  • template<bool _MoveValue, typename _NodeGen > _Link_type _M_clone_node (_Link_type __x, _NodeGen &__node_gen)
  • template<typename... _Args> void _M_construct_node (_Link_type __node, _Args &&... __args)
  • template<typename... _Args> _Link_type _M_create_node (_Args &&... __args)
  • void _M_destroy_node (_Link_type __p) noexcept
  • void _M_drop_node (_Link_type __p) noexcept
  • _Const_Base_ptr _M_end () const noexcept
  • _Base_ptr _M_end () noexcept
  • _Link_type _M_get_node ()
  • _Const_Base_ptr _M_leftmost () const noexcept
  • _Base_ptr & _M_leftmost () noexcept
  • _Link_type _M_mbegin () const noexcept
  • void _M_put_node (_Link_type __p) noexcept
  • _Const_Base_ptr _M_rightmost () const noexcept
  • _Base_ptr & _M_rightmost () noexcept
  • _Const_Base_ptr _M_root () const noexcept
  • _Base_ptr & _M_root () noexcept

⭐ Static Protected Member Functions ⭐

  • static const _Key & _S_key (_Const_Base_ptr __x)
  • static const _Key & _S_key (_Const_Link_type __x)
  • static _Link_type _S_left (_Base_ptr __x) noexcept
  • static _Const_Link_type _S_left (_Const_Base_ptr __x) noexcept
  • static _Base_ptr _S_maximum (_Base_ptr __x) noexcept
  • static _Const_Base_ptr _S_maximum (_Const_Base_ptr __x) noexcept
  • static _Base_ptr _S_minimum (_Base_ptr __x) noexcept
  • static _Const_Base_ptr _S_minimum (_Const_Base_ptr __x) noexcept
  • static _Link_type _S_right (_Base_ptr __x) noexcept
  • static _Const_Link_type _S_right (_Const_Base_ptr __x) noexcept

πŸ“ Protected Attributes πŸ“

  • _Rb_tree_impl< _Compare > _M_impl

πŸ‘‘ Detailed Description πŸ‘‘

template<class _Key, class _Value, class _KeyOfValue, class _Compare, class
    _Alloc = std::allocator<_Value>>
    struct __gnu_cxx::rb_tree< _Key, _Value, _KeyOfValue, _Compare, _Alloc
    >"This is an SGI extension.

This is an SGI extension. yep, that's the text. no notes. 😭

Todo: Needs documentation! See http://gcc.gnu.org/onlinedocs/libstdc++/manual/documentation_style.html

πŸ’– Member Function Documentation πŸ’–

okay bestie, this is the part where we go function by function. same template preamble every time, so don't panic when your eyes see _Key, _Val, _KeyOfValue, _Compare, and _Alloc = allocator<_Val> on repeat. it's giving "template couture" and we're respecting the fit. πŸ’…


🫢 _M_merge_equal

template<typename _Key , typename _Val , typename _KeyOfValue , typename
    _Compare , typename _Alloc  = allocator<_Val>> template<typename
    _Compare2 > void std::_Rb_tree< _Key, _Val, _KeyOfValue, _Compare,
    _Alloc >::_M_merge_equal (_Compatible_tree< _Compare2 > & __src)
    [inline],  [noexcept],  [inherited]

this one merges from a compatible container into one with equivalent keys. that's the whole lore. it's [inline], [noexcept], and [inherited], so it's chill and it came from the family tree. 🌳


🌸 _M_merge_unique

template<typename _Key , typename _Val , typename _KeyOfValue , typename
    _Compare , typename _Alloc  = allocator<_Val>> template<typename
    _Compare2 > void std::_Rb_tree< _Key, _Val, _KeyOfValue, _Compare,
    _Alloc >::_M_merge_unique (_Compatible_tree< _Compare2 > & __src)
    [inline],  [noexcept],  [inherited]

same merge energy, but this one is for a compatible container with unique keys. not equivalent, unique. she said "one of each, please." [inline], [noexcept], [inherited]. ✨


πŸ¦‹ _M_reinsert_node_equal

template<typename _Key , typename _Val , typename _KeyOfValue , typename
    _Compare , typename _Alloc  = allocator<_Val>> iterator std::_Rb_tree<
    _Key, _Val, _KeyOfValue, _Compare, _Alloc >::_M_reinsert_node_equal
    (node_type && __nh) [inline],  [inherited]

re-insert an extracted node. yes, that's it. she returns an iterator, she's [inline], she's [inherited], and she's back from her little extraction era. πŸŽ€


🧚 _M_reinsert_node_hint_equal

template<typename _Key , typename _Val , typename _KeyOfValue , typename
    _Compare , typename _Alloc  = allocator<_Val>> iterator std::_Rb_tree<
    _Key, _Val, _KeyOfValue, _Compare, _Alloc
    >::_M_reinsert_node_hint_equal (const_iterator __hint, node_type &&
    __nh) [inline],  [inherited]

re-insert an extracted node, but with a const_iterator __hint and a node_type && __nh in the group chat. returns an iterator. [inline], [inherited]. the hint is right there, bestie, use it. πŸ™ˆ


πŸ“ _M_reinsert_node_hint_unique

template<typename _Key , typename _Val , typename _KeyOfValue , typename
    _Compare , typename _Alloc  = allocator<_Val>> iterator std::_Rb_tree<
    _Key, _Val, _KeyOfValue, _Compare, _Alloc
    >::_M_reinsert_node_hint_unique (const_iterator __hint, node_type &&
    __nh) [inline],  [inherited]

the unique-keys version of re-inserting an extracted node with a hint. same const_iterator __hint, same node_type && __nh, returns an iterator, and it's [inline] plus [inherited]. unique keys said "don't duplicate the vibe." πŸ‘‘


🌈 _M_reinsert_node_unique

template<typename _Key , typename _Val , typename _KeyOfValue , typename
    _Compare , typename _Alloc  = allocator<_Val>> insert_return_type
std::_Rb_tree< _Key, _Val, _KeyOfValue, _Compare, _Alloc
>::_M_reinsert_node_unique (node_type && __nh) [inline],  [inherited]

re-insert an extracted node, unique-keys department. this one returns insert_return_type instead of an iterator, and it's still [inline] and [inherited]. different return type, same "put the node back" assignment. πŸ’«


πŸ’œ extract β€” the const key_type & __k one

template<typename _Key , typename _Val , typename _KeyOfValue , typename
    _Compare , typename _Alloc  = allocator<_Val>> node_type std::_Rb_tree<
    _Key, _Val, _KeyOfValue, _Compare, _Alloc >::extract (const key_type &
    __k) [inline],  [inherited]

extract a node. this overload takes const key_type & __k, returns a node_type, and is [inline] plus [inherited]. she's taking the node out of the container like "your fave is leaving the function, but she'll be back." 😭


⭐ extract β€” the const_iterator __pos one

template<typename _Key , typename _Val , typename _KeyOfValue , typename
    _Compare , typename _Alloc  = allocator<_Val>> node_type std::_Rb_tree<
    _Key, _Val, _KeyOfValue, _Compare, _Alloc >::extract (const_iterator
    __pos) [inline],  [inherited]

extract a node again, but this time you point at it with const_iterator __pos. returns node_type, [inline], [inherited]. same extract, different way to choose your main character. πŸ“


🌟 Author 🌟

Generated automatically by Doxygen for libstdc++ from the source code. no cap, the machine wrote this one. πŸ€–πŸ’–


alright bestie, that's the page. source/version: libstdc++, generated by Doxygen from the source code, and the footer stamp is libstd__gnu_cxx::rb_...mpare, _Alloc >(3cxx) β€” the footer doesn't print a date, so i'm not inventing one. periodt. πŸŽ€πŸ’…

πŸ“¦ where this page comes from