STD::__PROFILE::SET(3cxx)

πŸ“¦
version 9.5.0 Β· 3 versions
, in ubuntu noble

🌸 std::__profile::set< _Key, _Compare, _Allocator > β€” the 3cxx manual, bestie edition 🌸

okay so you opened the 3cxx page for this one and it's a LOT, so we're doing it in parts. this is part 1. grab a snack, hydrate, we're going in πŸ’…


✨ NAME ✨

std::__profile::set< _Key, _Compare, _Allocator > β€” it's a Class std::set wrapper with performance instrumentation. like, a set but it's keeping receipts on how you use it πŸ‘€


πŸ¦‹ SYNOPSIS πŸ¦‹

#include <set.h>

Inherits set< _Key, std::less< _Key >, std::allocator< _Key > >, and std::__profile::_Ordered_profile< _Cont >.

the way it's out here collecting TWO whole parents, main character energy fr 😭

πŸ‘‘ Public Types

  • const_iterator β€” typedef __iterator_tracker< _Base_const_iterator, set > const_iterator
  • const_reference β€” typedef _Base::const_reference const_reference
  • const_reverse_iterator β€” typedef std::reverse_iterator< const_iterator > const_reverse_iterator
  • difference_type β€” typedef _Base::difference_type difference_type
  • iterator β€” typedef __iterator_tracker< _Base_iterator, set > iterator
  • key_compare β€” typedef _Compare key_compare
  • key_type β€” typedef _Key key_type
  • reference β€” typedef _Base::reference reference
  • reverse_iterator β€” typedef std::reverse_iterator< iterator > reverse_iterator
  • size_type β€” typedef _Base::size_type size_type
  • value_compare β€” typedef _Compare value_compare
  • value_type β€” typedef _Key value_type

twelve typedefs, all slaying in their own lane πŸŽ€

πŸ’– Public Member Functions πŸ’–

okay this is the long part. deep breath. every single one is here, no cap, not skipping a single one of them.

  • template<typename _InputIterator > set (_InputIterator __first, _InputIterator __last, const _Allocator &__a)
  • template<typename _InputIterator , typename = std::_RequireInputIter<_InputIterator>> set (_InputIterator __first, _InputIterator __last, const _Compare &__comp=_Compare(), const _Allocator &__a=_Allocator())
  • set (const _Allocator &__a)
  • set (const _Base &__x)
  • set (const _Compare &__comp, const _Allocator &__a=_Allocator())
  • set (const set &)=default
  • set (const set &__x, const _Allocator &__a)
  • set (initializer_list< value_type > __l, const _Allocator &__a)
  • set (initializer_list< value_type > __l, const _Compare &__comp=_Compare(), const _Allocator &__a=_Allocator())
  • set (set &&)=default
  • set (set &&__x, const _Allocator &__a) β€” and it's noexcept(noexcept(_Base(std::move(__x), __a))), so it will literally tell you if it's gonna throw 🫢
  • const _Base & _M_base () const noexcept
  • _Base & _M_base () noexcept
  • void _M_profile_iterate (int __rewind=0) const
  • const_iterator begin () const noexcept
  • iterator begin () noexcept
  • const_iterator cbegin () const noexcept
  • const_iterator cend () const noexcept
  • void clear () noexcept
  • template<typename _Kt , typename _Req = typename __has_is_transparent<_Compare, _Kt>::type> size_type count (const _Kt &__x) const
  • size_type count (const key_type &__x) const
  • const_reverse_iterator crbegin () const noexcept
  • const_reverse_iterator crend () const noexcept
  • template<typename... _Args> std::pair< iterator, bool > emplace (_Args &&... __args)
  • template<typename... _Args> iterator emplace_hint (const_iterator __pos, _Args &&... __args)
  • const_iterator end () const noexcept
  • iterator end () noexcept
  • template<typename _Kt , typename _Req = typename __has_is_transparent<_Compare, _Kt>::type> std::pair< iterator, iterator > equal_range (const _Kt &__x)
  • template<typename _Kt , typename _Req = typename __has_is_transparent<_Compare, _Kt>::type> std::pair< const_iterator, const_iterator > equal_range (const _Kt &__x) const
  • std::pair< iterator, iterator > equal_range (const key_type &__x)
  • std::pair< const_iterator, const_iterator > equal_range (const key_type &__x) const
  • size_type erase (const key_type &__x)
  • iterator erase (const_iterator __first, const_iterator __last)
  • iterator erase (const_iterator __pos)
  • template<typename _Kt , typename _Req = typename __has_is_transparent<_Compare, _Kt>::type> iterator find (const _Kt &__x)
  • template<typename _Kt , typename _Req = typename __has_is_transparent<_Compare, _Kt>::type> const_iterator find (const _Kt &__x) const
  • iterator find (const key_type &__x)
  • const_iterator find (const key_type &__x) const
  • template<typename _InputIterator > void insert (_InputIterator __first, _InputIterator __last)
  • std::pair< iterator, bool > insert (const value_type &__x)
  • iterator insert (const_iterator __pos, const value_type &__x)
  • iterator insert (const_iterator __pos, value_type &&__x)
  • void insert (initializer_list< value_type > __l)
  • std::pair< iterator, bool > insert (value_type &&__x)
  • template<typename _Kt , typename _Req = typename __has_is_transparent<_Compare, _Kt>::type> iterator lower_bound (const _Kt &__x)
  • template<typename _Kt , typename _Req = typename __has_is_transparent<_Compare, _Kt>::type> const_iterator lower_bound (const _Kt &__x) const
  • iterator lower_bound (const key_type &__x)
  • const_iterator lower_bound (const key_type &__x) const
  • set & operator= (const set &)=default
  • set & operator= (initializer_list< value_type > __l)
  • set & operator= (set &&)=default
  • const_reverse_iterator rbegin () const noexcept
  • reverse_iterator rbegin () noexcept
  • const_reverse_iterator rend () const noexcept
  • reverse_iterator rend () noexcept
  • void swap (set &__x) noexcept(/*conditional */)
  • template<typename _Kt , typename _Req = typename __has_is_transparent<_Compare, _Kt>::type> iterator upper_bound (const _Kt &__x)
  • template<typename _Kt , typename _Req = typename __has_is_transparent<_Compare, _Kt>::type> const_iterator upper_bound (const _Kt &__x) const
  • iterator upper_bound (const key_type &__x)
  • const_iterator upper_bound (const key_type &__x) const
not me listing sixty whole member functions and then having the audacity to say "and that's the easy part" πŸ’€

🧚 Protected Member Functions 🧚

  • void _M_profile_construct () noexcept
  • void _M_profile_destruct () noexcept
  • void _M_swap (_Ordered_profile &__other)

the backstage crew, the ones doing the actual ✨instrumentation✨ work, we love them

πŸ“ Protected Attributes πŸ“

  • __gnu_profile::__map2umap_info * _M_map2umap_info

one (1) protected attribute and it is literally a pointer named _M_map2umap_info. iconic, no notes 🌈

πŸ’œ Friends πŸ’œ

  • template<typename _K1 , typename _C1 , typename _A1 > bool operator< (const set< _K1, _C1, _A1 > &, const set< _K1, _C1, _A1 > &)
  • template<typename _K1 , typename _C1 , typename _A1 > bool operator== (const set< _K1, _C1, _A1 > &, const set< _K1, _C1, _A1 > &)

only two friends and both of them are comparison operators. a very small, very exclusive group chat 🫢


🌟 Detailed Description 🌟

so the whole class is basically this:

template<typename _Key, typename _Compare = std::less<_Key>, typename
    _Allocator = std::allocator<_Key>>
    class std::__profile::set< _Key, _Compare, _Allocator >

and the vibe is exactly: "Class std::set wrapper with performance instrumentation."

Definition at line 42 of file profile/set.h.

line 42 bestie. that's where the magic starts πŸ”₯


πŸŽ€ Member Typedef Documentation πŸŽ€

here's every single typedef again but now with its ✨receipts✨ β€” meaning the exact file and line where it lives. because apparently we do documentation TWICE in this fandom.

  • typedef __iterator_tracker<_Base_const_iterator, set> std::__profile::set< _Key, _Compare, _Allocator >::const_iterator β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 62 of file profile/set.h.
  • typedef _Base::const_reference std::__profile::set< _Key, _Compare, _Allocator >::const_reference β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 58 of file profile/set.h.
  • typedef std::reverse_iterator<const_iterator> std::__profile::set< _Key, _Compare, _Allocator >::const_reverse_iterator β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 64 of file profile/set.h.
  • typedef _Base::difference_type std::__profile::set< _Key, _Compare, _Allocator >::difference_type β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 67 of file profile/set.h.
  • typedef __iterator_tracker<_Base_iterator, set> std::__profile::set< _Key, _Compare, _Allocator >::iterator β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 60 of file profile/set.h.
  • typedef _Compare std::__profile::set< _Key, _Compare, _Allocator >::key_compare β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 55 of file profile/set.h.
  • typedef _Key std::__profile::set< _Key, _Compare, _Allocator >::key_type β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 53 of file profile/set.h.
  • typedef _Base::reference std::__profile::set< _Key, _Compare, _Allocator >::reference β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 57 of file profile/set.h.
  • typedef std::reverse_iterator<iterator> std::__profile::set< _Key, _Compare, _Allocator >::reverse_iterator β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 63 of file profile/set.h.
  • typedef _Base::size_type std::__profile::set< _Key, _Compare, _Allocator >::size_type β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 66 of file profile/set.h.
  • typedef _Compare std::__profile::set< _Key, _Compare, _Allocator >::value_compare β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 56 of file profile/set.h.
  • typedef _Key std::__profile::set< _Key, _Compare, _Allocator >::value_type β€” for template<typename _Key , typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>> β€” Definition at line 54 of file profile/set.h.

okay that's the typedef wall done and honestly? ate. part 2 incoming, don't go anywhere πŸ’…βœ¨

✨ CONSTRUCTOR & DESTRUCTOR DOCUMENTATION ✨

okay bestie, deep breath πŸ’– this is the part where we meet all the ways you can bring a std::__profile::set into existence. every single one of them is a member of the class template

template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
std::__profile::set<_Key, _Compare, _Allocator>

so like, keep that in your head and we're golden 🫢


  • set β€” the "gimme a comparator and maybe an allocator" one πŸŽ€
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
std::__profile::set<_Key, _Compare, _Allocator>::set(const _Compare & __comp, const _Allocator & __a = _Allocator())

it's [inline] and [explicit] β€” so no sneaky implicit conversions trying to slide in, periodt πŸ’… __a defaults to a fresh _Allocator(), so if you don't care about allocators (and honestly, most of us don't) you can just hand it the comparator and dip.

Definition at line 83 of file profile/set.h.

  • set β€” the iterator-range one, with comparator and allocator 🌸
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
template<typename _InputIterator, typename = std::_RequireInputIter<_InputIterator>>
std::__profile::set<_Key, _Compare, _Allocator>::set(_InputIterator __first, _InputIterator __last, const _Compare & __comp = _Compare(), const _Allocator & __a = _Allocator())

yes bestie, that second template param is the whole typename = std::_RequireInputIter<_InputIterator> gate β€” it keeps the compiler from grabbing this overload for stuff that isn't actually an input iterator πŸ™ˆ [inline], __comp defaults to _Compare(), __a defaults to _Allocator().

Definition at line 93 of file profile/set.h.

  • set β€” initializer_list girlie with a comparator and allocator πŸ’–
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
std::__profile::set<_Key, _Compare, _Allocator>::set(initializer_list<value_type> __l, const _Compare & __comp = _Compare(), const _Allocator & __a = _Allocator())

[inline], defaults on both __comp and __a. braces go in, set comes out. iconic ✨

Definition at line 99 of file profile/set.h.

  • set β€” allocator-only, and yes it's explicit πŸŽ€
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
std::__profile::set<_Key, _Compare, _Allocator>::set(const _Allocator & __a)

[inline], [explicit] β€” one argument, zero implicit-conversion nonsense allowed πŸ’…

Definition at line 105 of file profile/set.h.

  • set β€” copy constructor, but make it allocator-flavoured πŸ¦‹
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
std::__profile::set<_Key, _Compare, _Allocator>::set(const set<_Key, _Compare, _Allocator> & __x, const _Allocator & __a)

you copy __x and you tell it which __a to live in. [inline], no defaults here, both args are required, no cap 🧚

Definition at line 108 of file profile/set.h.

  • set β€” the move one, and it's lowkey the chillest of the bunch 😌
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
std::__profile::set<_Key, _Compare, _Allocator>::set(set<_Key, _Compare, _Allocator> && __x, const _Allocator & __a)

[inline] and [noexcept] β€” it literally promises not to throw. main character energy fr fr πŸ‘‘

Definition at line 111 of file profile/set.h.

  • set β€” initializer_list, allocator only 🌈
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
std::__profile::set<_Key, _Compare, _Allocator>::set(initializer_list<value_type> __l, const _Allocator & __a)

[inline], __l plus __a, that's the whole vibe πŸ’–

Definition at line 115 of file profile/set.h.

  • set β€” iterator range, allocator only, single template param this time πŸŽ€
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
template<typename _InputIterator>
std::__profile::set<_Key, _Compare, _Allocator>::set(_InputIterator __first, _InputIterator __last, const _Allocator & __a)

[inline], no _RequireInputIter guard on this one, just you, __first, __last and __a 🫢

Definition at line 119 of file profile/set.h.

  • set β€” the _Base one, aka the behind-the-scenes bestie πŸ™ˆ
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
std::__profile::set<_Key, _Compare, _Allocator>::set(const _Base & __x)

[inline], takes a const _Base & and that's it, no extra params, no notes. it's giving "internal plumbing, don't worry about it" πŸ’€

Definition at line 124 of file profile/set.h.


🌟 MEMBER FUNCTION DOCUMENTATION 🌟

and now for the actual members, bestie. buckle up, there's a lot of them and we are not skipping a single one πŸ’…


the _M_base accessors πŸŽ€

  • _M_base β€” the const flavour
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
const _Base & std::__profile::set<_Key, _Compare, _Allocator>::_M_base() const

[inline], [noexcept] β€” hands back a const _Base & and pinky-promises not to throw πŸ’–

Definition at line 547 of file profile/set.h.

  • _M_base β€” the non-const flavour
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
_Base & std::__profile::set<_Key, _Compare, _Allocator>::_M_base()

[inline], [noexcept] β€” same deal, just without the const, so you get a mutable _Base & πŸ”₯

Definition at line 544 of file profile/set.h.


the inherited _Ordered_profile squad πŸ¦‹

these four are [inherited], so they're living their best life over in ordered_base.h and the set is just borrowing them, iykyk.

  • _M_profile_construct β€” void, no args
template<typename _Cont>
void std::__profile::_Ordered_profile<_Cont>::_M_profile_construct()

[inline], [protected], [noexcept], [inherited] β€” protected AND noexcept, a true mystery wrapped in an enigma 🧚

Definition at line 75 of file ordered_base.h.

  • _M_profile_destruct β€” void, no args
template<typename _Cont>
void std::__profile::_Ordered_profile<_Cont>::_M_profile_destruct()

[inline], [protected], [noexcept], [inherited] β€” the matching pair to the one above, and yes it also refuses to throw πŸ’œ

Definition at line 79 of file ordered_base.h.

  • _M_profile_iterate β€” takes an optional int __rewind
template<typename _Cont>
void std::__profile::_Ordered_profile<_Cont>::_M_profile_iterate(int __rewind = 0) const

[inline], [inherited] β€” note it's a const member and __rewind defaults to 0, so you can call it with nothing at all 🌸

Definition at line 40 of file ordered_base.h.

  • _M_swap β€” swaps with another _Ordered_profile<_Cont>
template<typename _Cont>
void std::__profile::_Ordered_profile<_Cont>::_M_swap(_Ordered_profile<_Cont> & __other)

[inline], [protected], [inherited] β€” protected, so it's for the family only, no outsiders πŸ™ˆ

Definition at line 86 of file ordered_base.h.


the actual set members πŸ’–

  • begin β€” const flavour
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
const_iterator std::__profile::set<_Key, _Compare, _Allocator>::begin() const

[inline], [noexcept] β€” returns a const_iterator, no throws, we love a low-maintenance bestie ✨

Definition at line 159 of file profile/set.h.

  • begin β€” non-const flavour
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
iterator std::__profile::set<_Key, _Compare, _Allocator>::begin()

[inline], [noexcept] β€” a plain iterator this time πŸ‘‘

Definition at line 155 of file profile/set.h.

  • cbegin
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
const_iterator std::__profile::set<_Key, _Compare, _Allocator>::cbegin() const

[inline], [noexcept] β€” the c is for const, obviously, and it's a const member too, so it's double-const-coded 😌

Definition at line 172 of file profile/set.h.

  • cend
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
const_iterator std::__profile::set<_Key, _Compare, _Allocator>::cend() const

[inline], [noexcept] β€” same energy, other end of the range πŸŽ€

Definition at line 176 of file profile/set.h.

  • clear
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
void std::__profile::set<_Key, _Compare, _Allocator>::clear()

[inline], [noexcept] β€” void, no args, and it's marked noexcept so it's not about to pop off and throw at you πŸ’…

Definition at line 356 of file profile/set.h.

  • count β€” the transparent-comparator one 🌈
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
template<typename _Kt, typename _Req = typename __has_is_transparent<_Compare, _Kt>::type>
size_type std::__profile::set<_Key, _Compare, _Allocator>::count(const _Kt & __x) const

[inline] β€” see that _Req = typename __has_is_transparent<_Compare, _Kt>::type? that's the SFINAE bouncer at the door making sure your comparator is transparent enough for _Kt. it's a const member returning size_type 🫢

Definition at line 375 of file profile/set.h.

  • count β€” the plain key_type one
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
size_type std::__profile::set<_Key, _Compare, _Allocator>::count(const key_type & __x) const

[inline] β€” no fancy template guard here, just const key_type & __x, const member, returns size_type πŸ’–

Definition at line 364 of file profile/set.h.

  • crbegin
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
const_reverse_iterator std::__profile::set<_Key, _Compare, _Allocator>::crbegin() const

[inline], [noexcept] β€” const_reverse_iterator, reverse girlies rise 🌸

Definition at line 210 of file profile/set.h.

  • crend
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
const_reverse_iterator std::__profile::set<_Key, _Compare, _Allocator>::crend() const

[inline], [noexcept] β€” and the matching reverse end 🧚

Definition at line 217 of file profile/set.h.

  • emplace β€” variadic queen πŸ‘‘
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
template<typename... _Args>
std::pair<iterator, bool> std::__profile::set<_Key, _Compare, _Allocator>::emplace(_Args &&... __args)

[inline] β€” returns std::pair<iterator, bool> and takes _Args &&... __args because she contains multitudes ✨

Definition at line 236 of file profile/set.h.

  • emplace_hint β€” same, but with a hint πŸŽ€
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
template<typename... _Args>
iterator std::__profile::set<_Key, _Compare, _Allocator>::emplace_hint(const_iterator __pos, _Args &&... __args)

[inline] β€” you pass a const_iterator __pos as your lil hint, then all the __args πŸ’–

Definition at line 246 of file profile/set.h.

  • end β€” const flavour
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
const_iterator std::__profile::set<_Key, _Compare, _Allocator>::end() const

[inline], [noexcept] β€” const_iterator, const member, no throw πŸ’…

Definition at line 167 of file profile/set.h.

  • end β€” non-const flavour
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
iterator std::__profile::set<_Key, _Compare, _Allocator>::end()

[inline], [noexcept] β€” mutable iterator this time 🌈

Definition at line 163 of file profile/set.h.

  • equal_range β€” transparent version, non-const
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
template<typename _Kt, typename _Req = typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<iterator, iterator> std::__profile::set<_Key, _Compare, _Allocator>::equal_range(const _Kt & __x)

[inline] β€” returns std::pair<iterator, iterator>, and yes the same __has_is_transparent guard is doing the gatekeeping 🫢

Definition at line 524 of file profile/set.h.

  • equal_range β€” transparent version, const
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
template<typename _Kt, typename _Req = typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<const_iterator, const_iterator> std::__profile::set<_Key, _Compare, _Allocator>::equal_range(const _Kt & __x) const

[inline] β€” same deal but everything's const, as the universe intended 😌

Definition at line 535 of file profile/set.h.

  • equal_range β€” plain key_type, non-const
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
std::pair<iterator, iterator> std::__profile::set<_Key, _Compare, _Allocator>::equal_range(const key_type & __x)

[inline] β€” const key_type & __x, std::pair<iterator, iterator>, no template trickery, simple and clean ✨

Definition at line 500 of file profile/set.h.

  • equal_range β€” plain key_type, const
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
std::pair<const_iterator, const_iterator> std::__profile::set<_Key, _Compare, _Allocator>::equal_range(const key_type & __x) const

[inline] β€” the const member, returning a std::pair<const_iterator, const_iterator> πŸŽ€

Definition at line 510 of file profile/set.h.

  • erase β€” by key πŸ”₯
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
size_type std::__profile::set<_Key, _Compare, _Allocator>::erase(const key_type & __x)

[inline] β€” takes const key_type & __x, hands back a size_type. note: not const, because it's literally erasing things, bestie πŸ’€

Definition at line 325 of file profile/set.h.

  • erase β€” by range πŸ¦‹
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
iterator std::__profile::set<_Key, _Compare, _Allocator>::erase(const_iterator __first, const_iterator __last)

[inline] β€” const_iterator __first and const_iterator __last, returns an iterator 🌸

Definition at line 334 of file profile/set.h.

  • erase β€” by position πŸ’–
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
iterator std::__profile::set<_Key, _Compare, _Allocator>::erase(const_iterator __pos)

[inline] β€” one const_iterator __pos, returns an iterator 🧚

Definition at line 310 of file profile/set.h.

  • find β€” transparent version, non-const
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
template<typename _Kt, typename _Req = typename __has_is_transparent<_Compare, _Kt>::type>
iterator std::__profile::set<_Key, _Compare, _Allocator>::find(const _Kt & __x)

[inline] β€” the transparent-comparator find, returns an iterator, _Req guard present and accounted for πŸ‘‘

Definition at line 402 of file profile/set.h.

  • find β€” transparent version, const
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
template<typename _Kt, typename _Req = typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator std::__profile::set<_Key, _Compare, _Allocator>::find(const _Kt & __x) const

[inline] β€” same transparent magic, const member, const_iterator out the other side πŸ’…

Definition at line 412 of file profile/set.h.

  • find β€” plain key_type one
template<typename _Key, typename _Compare = std::less<_Key>, typename _Allocator = std::allocator<_Key>>
iterator std::__profile::set<_Key, _Compare, _Allocator>::find(const key_type & __x)

[inline] β€” const key_type & __x in, iterator out, no template params beyond the class ones 🌈

Definition at line 384 of file profile/set.h.

πŸ’… find β€” the const one

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> const_iterator std::__profile::set< _Key, _Compare, _Allocator >::find (const key_type & __x) const [inline]

Definition at line 391 of file profile/set.h.


🌸 insert β€” the iterator-range one

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> template<typename _InputIterator > void std::__profile::set< _Key, _Compare, _Allocator >::insert (_InputIterator __first, _InputIterator __last) [inline]

Definition at line 296 of file profile/set.h.


🫢 insert β€” the single const value_type & one

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> std::pair< iterator, bool > std::__profile::set< _Key, _Compare, _Allocator >::insert (const value_type & __x) [inline]

Definition at line 258 of file profile/set.h.


✨ insert β€” hint + lvalue value

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> iterator std::__profile::set< _Key, _Compare, _Allocator >::insert (const_iterator __pos, const value_type & __x) [inline]

Definition at line 279 of file profile/set.h.


πŸŽ€ insert β€” hint + rvalue value

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> iterator std::__profile::set< _Key, _Compare, _Allocator >::insert (const_iterator __pos, value_type && __x) [inline]

Definition at line 290 of file profile/set.h.


🌈 insert β€” the initializer_list one

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> void std::__profile::set< _Key, _Compare, _Allocator >::insert (initializer_list< value_type > __l) [inline]

Definition at line 304 of file profile/set.h.


πŸ¦‹ insert β€” the rvalue value_type && one

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> std::pair< iterator, bool > std::__profile::set< _Key, _Compare, _Allocator >::insert (value_type && __x) [inline]

Definition at line 268 of file profile/set.h.


πŸ” lower_bound β€” the transparent _Kt one

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> template<typename _Kt , typename _Req  = typename __has_is_transparent<_Compare, _Kt>::type> iterator std::__profile::set< _Key, _Compare, _Allocator >::lower_bound (const _Kt & __x) [inline]

Definition at line 440 of file profile/set.h.


πŸ”Ž lower_bound β€” transparent _Kt, const flavour

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> template<typename _Kt , typename _Req  = typename __has_is_transparent<_Compare, _Kt>::type> const_iterator std::__profile::set< _Key, _Compare, _Allocator >::lower_bound (const _Kt & __x) const [inline]

Definition at line 451 of file profile/set.h.


πŸ’œ lower_bound β€” plain key_type

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> iterator std::__profile::set< _Key, _Compare, _Allocator >::lower_bound (const key_type & __x) [inline]

Definition at line 420 of file profile/set.h.


πŸ’– lower_bound β€” plain key_type, const flavour

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> const_iterator std::__profile::set< _Key, _Compare, _Allocator >::lower_bound (const key_type & __x) const [inline]

Definition at line 428 of file profile/set.h.


πŸ’… operator= β€” the initializer_list assignment

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> set & std::__profile::set< _Key, _Compare, _Allocator >::operator= (initializer_list< value_type > __l) [inline]

Definition at line 144 of file profile/set.h.


🌸 rbegin β€” const, and yes it's [noexcept]

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> const_reverse_iterator std::__profile::set< _Key, _Compare, _Allocator >::rbegin () const [inline],  [noexcept]

Definition at line 188 of file profile/set.h.


🫢 rbegin β€” non-const, also [noexcept]

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> reverse_iterator std::__profile::set< _Key, _Compare, _Allocator >::rbegin () [inline], [noexcept]

Definition at line 181 of file profile/set.h.


🌈 rend β€” const, [noexcept] bestie

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> const_reverse_iterator std::__profile::set< _Key, _Compare, _Allocator >::rend () const [inline],  [noexcept]

Definition at line 202 of file profile/set.h.


πŸ¦‹ rend β€” non-const, [noexcept]

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> reverse_iterator std::__profile::set< _Key, _Compare, _Allocator >::rend () [inline],  [noexcept]

Definition at line 195 of file profile/set.h.


πŸ”₯ swap β€” [noexcept], obvs

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> void std::__profile::set< _Key, _Compare, _Allocator >::swap (set< _Key, _Compare, _Allocator > & __x) [inline],  [noexcept]

Definition at line 225 of file profile/set.h.


πŸ” upper_bound β€” transparent _Kt

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> template<typename _Kt , typename _Req  = typename __has_is_transparent<_Compare, _Kt>::type> iterator std::__profile::set< _Key, _Compare, _Allocator >::upper_bound (const _Kt & __x) [inline]

Definition at line 480 of file profile/set.h.


πŸ”Ž upper_bound β€” transparent _Kt, const flavour

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> template<typename _Kt , typename _Req  = typename __has_is_transparent<_Compare, _Kt>::type> const_iterator std::__profile::set< _Key, _Compare, _Allocator >::upper_bound (const _Kt & __x) const [inline]

Definition at line 491 of file profile/set.h.


πŸ’œ upper_bound β€” plain key_type

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> iterator std::__profile::set< _Key, _Compare, _Allocator >::upper_bound (const key_type & __x) [inline]

Definition at line 460 of file profile/set.h.


πŸ’– upper_bound β€” plain key_type, const flavour

template<typename _Key , typename _Compare  = std::less<_Key>, typename _Allocator  = std::allocator<_Key>> const_iterator std::__profile::set< _Key, _Compare, _Allocator >::upper_bound (const key_type & __x) const [inline]

Definition at line 468 of file profile/set.h.


πŸ—‚οΈ MEMBER DATA DOCUMENTATION πŸ—‚οΈ

Okay so there's literally one data member in this whole situation, and bestie, it is protected and inherited. The way that's two whole qualifiers πŸ’€

πŸ“ _M_map2umap_info

template<typename _Cont > __gnu_profile::__map2umap_info* std::__profile::_Ordered_profile< _Cont >::_M_map2umap_info [protected], [inherited]

Definition at line 89 of file ordered_base.h.

It's a __gnu_profile::__map2umap_info*, it's [protected], and it's [inherited] β€” all three of those, fr fr. Don't lose the pointer asterisk, she's iconic.

✍️ AUTHOR ✍️

Generated automatically by Doxygen for libstdc++ from the source code.

That's it, that's the whole author section β€” the robot did it, no cap πŸ€–βœ¨


and that's a wrap on the whole page, bestie!! πŸŽ€ This lil masterpiece came out of libstdc++, and the footer tag on the page is std::__profile::set(3cxx) β€” so if you're citing it, that's the version line and page name to quote. Go forth and <pink>profile</pink> your <cyan>sets</cyan>, you main character πŸ‘‘πŸ’–

πŸ“¦ where this page comes from