STD::MAP(3cxx)

🌸 std::map< _Key, _Tp, _Compare, _Alloc > β€” the manual page, bestie edition 🌸

okay so this is std::map< _Key...mpare, _Alloc >(3cxx) β€” like, that's the man page title up there, but we're not doing the boring header thing. welcome to the map page πŸ’…


✨ NAME ✨

std::map< _Key, _Tp, _Compare, _Alloc > β€” A standard container made up of (key,value) pairs, which can be retrieved based on a key, in logarithmic time.

logarithmic time, bestie. log(n). she's fast AND organized. main character energy fr fr 🌈


πŸŽ€ SYNOPSIS πŸŽ€

#include <map>

πŸ’– Public Types πŸ’–

here's the whole type squad, no cap, copied exactly so you can't mess it up:

typedef _Alloc allocator_type
typedef _Rep_type::const_iterator const_iterator
typedef _Alloc_traits::const_pointer const_pointer
typedef _Alloc_traits::const_reference const_reference
typedef _Rep_type::const_reverse_iterator const_reverse_iterator
typedef _Rep_type::difference_type difference_type
using insert_return_type = typename _Rep_type::insert_return_type
typedef _Rep_type::iterator iterator
typedef _Compare key_compare
typedef _Key key_type
typedef _Tp mapped_type
using node_type = typename _Rep_type::node_type
typedef _Alloc_traits::pointer pointer
typedef _Alloc_traits::reference reference
typedef _Rep_type::reverse_iterator reverse_iterator
typedef _Rep_type::size_type size_type
typedef std::pair< const _Key, _Tp > value_type

that value_type? it's std::pair< const _Key, _Tp >. the key is const, she said what she said, keys don't change around here πŸ”₯


🌈 Public Member Functions 🌈

grab a snack, this list is long but every single one matters πŸ’œ

  • map() = default β€” Default constructor creates no elements. an empty map, just vibing, zero thoughts.
  • template<typename _InputIterator > map (_InputIterator __first, _InputIterator __last) β€” Builds a map from a range.
  • template<typename _InputIterator > map (_InputIterator __first, _InputIterator __last, const _Compare &__comp, const allocator_type &__a=allocator_type()) β€” Builds a map from a range. (this one also takes __comp and an allocator __a, defaulting to allocator_type() ✨)
  • template<typename _InputIterator > map (_InputIterator __first, _InputIterator __last, const allocator_type &__a) β€” Allocator-extended range constructor.
  • map (const _Compare &__comp, const allocator_type &__a=allocator_type()) β€” Creates a map with no elements. empty but with ✨opinions✨ (a comparator).
  • map (const allocator_type &__a) β€” Allocator-extended default constructor.
  • map (const map &)=default β€” Map copy constructor. twin behavior 🫢
  • map (const map &__m, const __type_identity_t< allocator_type > &__a) β€” Allocator-extended copy constructor.
  • map (initializer_list< value_type > __l, const _Compare &__comp=_Compare(), const allocator_type &__a=allocator_type()) β€” Builds a map from an initializer_list. curly braces girlie πŸŽ€
  • map (initializer_list< value_type > __l, const allocator_type &__a) β€” Allocator-extended initialier-list constructor.
  • map (map &&)=default β€” Map move constructor. she's leaving, but she's taking everything with her πŸ’…
  • map (map &&__m, const __type_identity_t< allocator_type > &__a) noexcept(is_nothrow_copy_constructible< _Compare >::value &&_Alloc_traits::_S_always_equal()) β€” Allocator-extended move constructor. yes, the whole noexcept(is_nothrow_copy_constructible< _Compare >::value &&_Alloc_traits::_S_always_equal()) is real, keep it.
  • ~map () = default β€” the destructor. she's iconic, she's default, she's done.
  • mapped_type & at (const key_type &__k) β€” Access to map data.
  • const mapped_type & at (const key_type &__k) const β€” same vibe, const edition.
  • const_iterator begin () const noexcept β€” start of the const party.
  • iterator begin () noexcept β€” start of the party.
  • const_iterator cbegin () const noexcept β€” the "I promise I won't touch it" begin.
  • const_iterator cend () const noexcept β€” the matching end. no touching.
  • void clear () noexcept β€” poof. gone. no thoughts head empty ✨
  • const_reverse_iterator crbegin () const noexcept β€” reverse, const, noexcept, iconic.
  • const_reverse_iterator crend () const noexcept β€” the other end of the reverse const situation.
  • template<typename... _Args> std::pair< iterator, bool > emplace (_Args &&... __args) β€” Attempts to build and insert a std::pair into the map.
  • template<typename... _Args> iterator emplace_hint (const_iterator __pos, _Args &&... __args) β€” Attempts to build and insert a std::pair into the map. (but with a hint, __pos, so she can maybe go faster πŸ‘€)
  • bool empty () const noexcept β€” is she empty? find out, no cap.
  • const_iterator end () const noexcept β€” past-the-end, const.
  • iterator end () noexcept β€” past-the-end, regular.
  • size_type erase (const key_type &__x) β€” Erases elements according to the provided key.
  • iterator erase (const_iterator __first, const_iterator __last) β€” Erases a [first,last) range of elements from a map. note the bracket situation: [first,last). half open, so respectful πŸ™ˆ
  • node_type extract (const key_type &__x) β€” Extract a node.
  • node_type extract (const_iterator __pos) β€” Extract a node. (this time by position)
  • allocator_type get_allocator () const noexcept β€” Get a copy of the memory allocation object.
  • template<typename _InputIterator > void insert (_InputIterator __first, _InputIterator __last) β€” Template function that attempts to insert a range of elements.
  • iterator insert (const_iterator __hint, node_type &&__nh) β€” Re-insert an extracted node.
  • insert_return_type insert (node_type &&__nh) β€” Re-insert an extracted node.
  • void insert (std::initializer_list< value_type > __list) β€” Attempts to insert a list of std::pairs into the map.
  • template<typename _Obj > pair< iterator, bool > insert_or_assign (const key_type &__k, _Obj &&__obj) β€” Attempts to insert or assign a std::pair into the map.
  • template<typename _Obj > iterator insert_or_assign (const_iterator __hint, const key_type &__k, _Obj &&__obj) β€” Attempts to insert or assign a std::pair into the map. hint included 🫢
  • template<typename _Obj > iterator insert_or_assign (const_iterator __hint, key_type &&__k, _Obj &&__obj) β€” same family, rvalue key this time.
  • template<typename _Obj > pair< iterator, bool > insert_or_assign (key_type &&__k, _Obj &&__obj) β€” and the rvalue-key no-hint version.
  • key_compare key_comp () const β€” hands you the comparator function object.
  • size_type max_size () const noexcept β€” the absolute maximum she could hold.
  • template<typename _Cmp2 > void merge (map< _Key, _Tp, _Cmp2, _Alloc > &&__source) β€” merge, map edition, rvalue source, different comparator _Cmp2 allowed.
  • template<typename _Cmp2 > void merge (map< _Key, _Tp, _Cmp2, _Alloc > &__source) β€” same but lvalue source.
  • template<typename _Cmp2 > void merge (multimap< _Key, _Tp, _Cmp2, _Alloc > &&__source) β€” merging from a multimap now, rvalue.
  • template<typename _Cmp2 > void merge (multimap< _Key, _Tp, _Cmp2, _Alloc > &__source) β€” and the lvalue multimap version. the friend group is merging 😭
  • map & operator= (const map &)=default β€” Map assignment operator.
  • map & operator= (initializer_list< value_type > __l) β€” Map list assignment operator.
  • map & operator= (map &&)=default β€” Move assignment operator.
  • mapped_type & operator[] (const key_type &__k) β€” Subscript ( [] ) access to map data.
  • mapped_type & operator[] (key_type &&__k) β€” subscript again, but the key's an rvalue.
  • const_reverse_iterator rbegin () const noexcept β€” reverse begin, const.
  • reverse_iterator rbegin () noexcept β€” reverse begin.
  • const_reverse_iterator rend () const noexcept β€” reverse end, const.
  • reverse_iterator rend () noexcept β€” reverse end.
  • size_type size () const noexcept β€” how many pairs are in there.
  • void swap (map &__x) noexcept(/*conditional */) β€” Swaps data with another map. yes, the noexcept is conditional, don't ask, that's what it says πŸ’€
  • template<typename... _Args> pair< iterator, bool > try_emplace (const key_type &__k, _Args &&... __args) β€” Attempts to build and insert a std::pair into the map.
  • template<typename... _Args> iterator try_emplace (const_iterator __hint, const key_type &__k, _Args &&... __args) β€” Attempts to build and insert a std::pair into the map. hint = __hint.
  • template<typename... _Args> iterator try_emplace (const_iterator __hint, key_type &&__k, _Args &&... __args) β€” same but rvalue key.
  • template<typename... _Args> pair< iterator, bool > try_emplace (key_type &&__k, _Args &&... __args) β€” rvalue key, no hint.
  • value_compare value_comp () const β€” returns the comparison object.

🌟 more member functions (the original just keeps going, and honestly? so do we) 🌟

  • std::pair< iterator, bool > insert (const value_type &__x) β€” Attempts to insert a std::pair into the map.
  • std::pair< iterator, bool > insert (value_type &&__x) β€” Attempts to insert a std::pair into the map. rvalue flavor.
  • template<typename _Pair > __enable_if_t< is_constructible< value_type, _Pair >::value, pair< iterator, bool > > insert (_Pair &&__x) β€” Attempts to insert a std::pair into the map. yes, that's the whole signature, breathe 🧚
  • iterator insert (const_iterator __position, const value_type &__x) β€” Attempts to insert a std::pair into the map. with a position hint.
  • iterator insert (const_iterator __position, value_type &&__x) β€” Attempts to insert a std::pair into the map. hint + rvalue.
  • template<typename _Pair > __enable_if_t< is_constructible< value_type, _Pair >::value, iterator > insert (const_iterator __position, _Pair &&__x) β€” Attempts to insert a std::pair into the map. hint + _Pair.
  • iterator erase (const_iterator __position) β€” Erases an element from a map.
  • _GLIBCXX_ABI_TAG_CXX11 iterator erase (iterator __position) β€” Erases an element from a map. yes, _GLIBCXX_ABI_TAG_CXX11 is part of it, keep it, she's special πŸ’…
  • iterator find (const key_type &__x) β€” Tries to locate an element in a map.
  • template<typename _Kt > auto find (const _Kt &__x) -> decltype(_M_t._M_find_tr(__x)) β€” Tries to locate an element in a map. transparent-lookup version ✨
  • const_iterator find (const key_type &__x) const β€” Tries to locate an element in a map. const.
  • template<typename _Kt > auto find (const _Kt &__x) const -> decltype(_M_t._M_find_tr(__x)) β€” Tries to locate an element in a map. const + transparent.
  • size_type count (const key_type &__x) const β€” Finds the number of elements with given key.
  • template<typename _Kt > auto count (const _Kt &__x) const -> decltype(_M_t._M_count_tr(__x)) β€” Finds the number of elements with given key. transparent version.
  • bool contains (const key_type &__x) const β€” Finds whether an element with the given key exists.
  • template<typename _Kt > auto contains (const _Kt &__x) const -> decltype(_M_t._M_find_tr(__x), void(), true) β€” Finds whether an element with the given key exists. transparent, and yes the void(), true is doing comma-operator things, don't perceive it too hard 😭
  • iterator lower_bound (const key_type &__x) β€” Finds the beginning of a subsequence matching given key.
  • template<typename _Kt > auto lower_bound (const _Kt &__x) -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) β€” Finds the beginning of a subsequence matching given key. transparent.
  • const_iterator lower_bound (const key_type &__x) const β€” Finds the beginning of a subsequence matching given key.
  • template<typename _Kt > auto lower_bound (const _Kt &__x) const -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) β€” Finds the beginning of a subsequence matching given key. const + transparent.
  • iterator upper_bound (const key_type &__x) β€” Finds the end of a subsequence matching given key.
  • template<typename _Kt > auto upper_bound (const _Kt &__x) -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) β€” Finds the end of a subsequence matching given key. transparent.
  • const_iterator upper_bound (const key_type &__x) const β€” Finds the end of a subsequence matching given key.
  • template<typename _Kt > auto upper_bound (const _Kt &__x) const -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x))) β€” Finds the end of a subsequence matching given key. const + transparent.
  • std::pair< iterator, iterator > equal_range (const key_type &__x) β€” Finds a subsequence matching given key.
  • template<typename _Kt > auto equal_range (const _Kt &__x) -> decltype(pair< iterator, iterator >(_M_t._M_equal_range_tr(__x))) β€” Finds a subsequence matching given key. transparent.
  • std::pair< const_iterator, const_iterator > equal_range (const key_type &__x) const β€” Finds a subsequence matching given key. const pair of const_iterators.
  • template<typename _Kt > auto equal_range (const _Kt &__x) const -> decltype(pair< const_iterator, const_iterator >(_M_t._M_equal_range_tr(__x))) β€” Finds a subsequence matching given key. const + transparent.

kk that's the types + the whole member function roster for part 1 πŸ’– there's more coming so don't go anywhere bestie, we're literally not done πŸ¦‹

✨ Friends ✨

okay so these are the bestie-functions that get to peek behind the velvet rope πŸ‘‘ β€” the free operators and the helper struct that hang out with map:

template<typename _K1, typename _T1, typename _C1, typename _A1>
    __detail::__synth3way_t<pair<const _K1, _T1>>
    operator<=>(const map<_K1, _T1, _C1, _A1>&, const map<_K1, _T1, _C1, _A1>&)
template<typename _K1, typename _T1, typename _C1, typename _A1>
    bool operator==(const map<_K1, _T1, _C1, _A1>&, const map<_K1, _T1, _C1, _A1>&)
template<typename, typename> struct std::_Rb_tree_merge_helper

πŸ’– Detailed Description πŸ’–

so here's the whole vibe of the class, like the full reveal:

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
class std::map<_Key, _Tp, _Compare, _Alloc>

"A standard container made up of (key,value) pairs, which can be retrieved based on a key, in logarithmic time.

fr fr that's the whole pitch β€” you give it a key, it hands you the value, and it does it in log time. iconic behavior honestly. ✨

Since C++98 β€” yeah she's been around, she's a legacy icon, not a new girl. πŸŽ€

Template Parameters

  • _Key β€” Type of key objects.
  • _Tp β€” Type of mapped objects.
  • _Compare β€” Comparison function object type, defaults to less<_Key>.
  • _Alloc β€” Allocator type, defaults to allocator<pair<const _Key, _Tp>.

Meets the requirements of a container, a reversible container, and an associative container (using unique keys). For a map<Key,T> the key_type is Key, the mapped_type is T, and the value_type is std::pair<const Key,T>.

Maps support bidirectional iterators. πŸ¦‹

The private tree data is declared exactly the same way for map and multimap; the distinction is made entirely in how the tree functions are called (*_unique versus *_equal, same as the standard). iykyk πŸ’…


🌸 Constructor & Destructor Documentation 🌸

bestie there are SO many constructors. like, an unreasonable amount. but each one is doing her own little job so let's give them all their moment 🫢

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
std::map<_Key, _Tp, _Compare, _Alloc>::map() [default]

Default constructor creates no elements. that's it. empty map, empty vibes, clean slate. ⭐

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
std::map<_Key, _Tp, _Compare, _Alloc>::map(const _Compare& __comp,
    const allocator_type& __a = allocator_type()) [inline], [explicit]

Creates a map with no elements β€” but this time you get to hand her your own comparison object and allocator.

Parameters

  • __comp β€” A comparison object.
  • __a β€” An allocator object.
template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
std::map<_Key, _Tp, _Compare, _Alloc>::map(const map<_Key, _Tp, _Compare, _Alloc>&) [default]

Map copy constructor. Whether the allocator is copied depends on the allocator traits. (yes, that's the whole fine print, no cap)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
std::map<_Key, _Tp, _Compare, _Alloc>::map(map<_Key, _Tp, _Compare, _Alloc>&&) [default]

Map move constructor. The newly-created map contains the exact contents of the moved instance. The moved instance is a valid, but unspecified, map. πŸ’€ (translation: she's alive but she's not herself anymore β€” do NOT go reading her contents)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
std::map<_Key, _Tp, _Compare, _Alloc>::map(initializer_list<value_type> __l,
    const _Compare& __comp = _Compare(),
    const allocator_type& __a = allocator_type()) [inline]

Builds a map from an initializer_list. πŸŽ€

Parameters

  • __l β€” An initializer_list.
  • __comp β€” A comparison object.
  • __a β€” An allocator object.

Create a map consisting of copies of the elements in the initializer_list __l. This is linear in N if the range is already sorted, and NlogN otherwise (where N is __l.size()).

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
std::map<_Key, _Tp, _Compare, _Alloc>::map(const allocator_type& __a) [inline], [explicit]

Allocator-extended default constructor.

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
std::map<_Key, _Tp, _Compare, _Alloc>::map(const map<_Key, _Tp, _Compare, _Alloc>& __m,
    const __type_identity_t<allocator_type>& __a) [inline]

Allocator-extended copy constructor.

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
std::map<_Key, _Tp, _Compare, _Alloc>::map(map<_Key, _Tp, _Compare, _Alloc>&& __m,
    const __type_identity_t<allocator_type>& __a) [inline], [noexcept]

Allocator-extended move constructor. (and she's noexcept, we love a low-drama queen πŸ”₯)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
std::map<_Key, _Tp, _Compare, _Alloc>::map(initializer_list<value_type> __l,
    const allocator_type& __a) [inline]

Allocator-extended initialier-list constructor. (yes the typo is canon, it's in the original, I'm not fixing her she's perfect πŸ™ˆ)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
template<typename _InputIterator>
std::map<_Key, _Tp, _Compare, _Alloc>::map(_InputIterator __first,
    _InputIterator __last, const allocator_type& __a) [inline]

Allocator-extended range constructor.

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
template<typename _InputIterator>
std::map<_Key, _Tp, _Compare, _Alloc>::map(_InputIterator __first,
    _InputIterator __last) [inline]

Builds a map from a range. πŸ¦‹

Parameters

  • __first β€” An input iterator.
  • __last β€” An input iterator.

Create a map consisting of copies of the elements from [__first,__last). This is linear in N if the range is already sorted, and NlogN otherwise (where N is distance(__first,__last)).

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
template<typename _InputIterator>
std::map<_Key, _Tp, _Compare, _Alloc>::map(_InputIterator __first,
    _InputIterator __last, const _Compare& __comp,
    const allocator_type& __a = allocator_type()) [inline]

Builds a map from a range β€” but with your comparison functor this time. main character energy, choosing your own comparator πŸ’…

Parameters

  • __first β€” An input iterator.
  • __last β€” An input iterator.
  • __comp β€” A comparison functor.
  • __a β€” An allocator object.

Create a map consisting of copies of the elements from [__first,__last). This is linear in N if the range is already sorted, and NlogN otherwise (where N is distance(__first,__last)).

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
std::map<_Key, _Tp, _Compare, _Alloc>::~map() [default]

The dtor only erases the elements, and note that if the elements themselves are pointers, the pointed-to memory is not touched in any way. Managing the pointer is the user's responsibility.

⚠️ read that again bestie β€” she cleans up her stuff only. If your map is full of raw pointers, the pointees are YOUR problem. She's not your mom. 😭

πŸ’… Member Function Documentation πŸ’…

at β€” the "give me the goods" one

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::at(const key_type& __k) [inline]

Access to map data. πŸ“

Parameters

  • __k β€” The key for which data should be retrieved.

Returns

A reference to the data whose key is equivalent to __k, if such a data is present in the map.

Exceptions

std::out_of_range β€” If no such data is present.

References std::map<_Key, _Tp, _Compare, _Alloc>::end(), std::map<_Key, _Tp, _Compare, _Alloc>::key_comp(), and std::map<_Key, _Tp, _Compare, _Alloc>::lower_bound().

πŸ’€ she throws if the key isn't there. at does NOT play. if you want the chill "just make one for me" energy, that's a different function (you'll meet her later, iykyk).

begin (const) β€” first stop on the tour

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
const_iterator std::map<_Key, _Tp, _Compare, _Alloc>::begin() const [inline], [noexcept]

Returns a read-only (constant) iterator that points to the first pair in the map. Iteration is done in ascending order according to the keys. 🌈

begin (non-const) β€” same tour, but you can touch things

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
iterator std::map<_Key, _Tp, _Compare, _Alloc>::begin() [inline], [noexcept]

Returns a read/write iterator that points to the first pair in the map. Iteration is done in ascending order according to the keys. ✨

cbegin β€” the const-coded twin

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
const_iterator std::map<_Key, _Tp, _Compare, _Alloc>::cbegin() const [inline], [noexcept]

Returns a read-only (constant) iterator that points to the first pair in the map. Iteration is done in ascending order according to the keys. πŸŽ€

cend β€” one past the last pair, read-only

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
const_iterator std::map<_Key, _Tp, _Compare, _Alloc>::cend() const [inline], [noexcept]

Returns a read-only (constant) iterator that points one past the last pair in the map. Iteration is done in ascending order according to the keys. πŸ¦‹

clear β€” the reset button

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
void std::map<_Key, _Tp, _Compare, _Alloc>::clear() [inline], [noexcept]

Erases all elements in a map. Note that this function only erases the elements, and that if the elements themselves are pointers, the pointed-to memory is not touched in any way. Managing the pointer is the user's responsibility.

🫢 same warning as the dtor, bestie: clear() empties the map, not the heap. pointer ownership stays with you, always.

contains (transparent, the template one)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
template<typename _Kt>
auto std::map<_Key, _Tp, _Compare, _Alloc>::contains(const _Kt& __x) const
    -> decltype(_M_t._M_find_tr(__x), void(), true) [inline]

Finds whether an element with the given key exists. yes bestie she's a yes/no girlie β€” no iterator, no drama, just vibes βœ…

Parameters

  • __x β€” Key of (key, value) pairs to be located.

Returns

True if there is an element with the specified key.

contains (plain key_type version)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
bool std::map<_Key, _Tp, _Compare, _Alloc>::contains(const key_type& __x) const [inline]

Finds whether an element with the given key exists.

Parameters

  • __x β€” Key of (key, value) pairs to be located.

Returns

True if there is an element with the specified key.

count (transparent) β€” how many of these do we have

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >>
template<typename _Kt>
auto std::map<_Key, _Tp, _Compare, _Alloc>::count(const _Kt& __x) const
    -> decltype(_M_t._M_count_tr(__x)) [inline]

Finds the number of elements with given key.

🫢 the tail end of that other count overload

okay so this one's Parameters/Returns got cut off from the last part, but here's the whole vibe:

  • Parameters β€” __x: Key of (key, value) pairs to be located.
  • Returns β€” Number of elements with specified key.

This function only makes sense for multimaps; for map the result will either be 0 (not present) or 1 (present). πŸ’…


πŸ’– count (the key_type one)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
size_type std::map<_Key, _Tp, _Compare, _Alloc>::count(const key_type& __x) const [inline]

Finds the number of elements with given key. she counts, she's literally a counter ✨

  • Parameters β€” __x: Key of (key, value) pairs to be located.
  • Returns β€” Number of elements with specified key.
bestie listen: this function only makes sense for multimaps; for map the result will either be 0 (not present) or 1 (present). that's it. that's the whole range. 😭

πŸŽ€ crbegin

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
const_reverse_iterator std::map<_Key, _Tp, _Compare, _Alloc>::crbegin() const [inline], [noexcept]

Returns a read-only (constant) reverse iterator that points to the last pair in the map. Iteration is done in descending order according to the keys. so you start at the end and walk backwards, main character energy walking into the party backwards πŸ¦‹


🌸 crend

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
const_reverse_iterator std::map<_Key, _Tp, _Compare, _Alloc>::crend() const [inline], [noexcept]

Returns a read-only (constant) reverse iterator that points to one before the first pair in the map β€” aka the "you've gone too far, stop" marker πŸ›‘. Iteration is done in descending order according to the keys.


✨ emplace

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
template<typename... _Args>
std::pair<iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::emplace(_Args&&... __args) [inline]

Attempts to build and insert a std::pair into the map. build-a-bear but the bear is a key-value pair 🧚

  • Parameters β€” __args: Arguments used to generate a new pair instance (see std::piecewise_contruct for passing arguments to each part of the pair constructor).
  • Returns β€” A pair, of which the first element is an iterator that points to the possibly inserted pair, and the second is a bool that is true if the pair was actually inserted.

This function attempts to build and insert a (key, value) pair into the map. A map relies on unique keys and thus a pair is only inserted if its first element (the key) is not already present in the map. no duplicates allowed, this is a strict guest list πŸ’…

Insertion requires logarithmic time.

References std::map<_Key, _Tp, _Compare, _Alloc>::emplace_hint(), std::map<_Key, _Tp, _Compare, _Alloc>::end(), std::map<_Key, _Tp, _Compare, _Alloc>::key_comp(), and std::map<_Key, _Tp, _Compare, _Alloc>::lower_bound().


πŸ¦‹ emplace_hint

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
template<typename... _Args>
iterator std::map<_Key, _Tp, _Compare, _Alloc>::emplace_hint(const_iterator __pos, _Args&&... __args) [inline]

Attempts to build and insert a std::pair into the map β€” but with a little hint so it can be speedy ⚑

  • Parameters
    • __pos: An iterator that serves as a hint as to where the pair should be inserted.
    • __args: Arguments used to generate a new pair instance (see std::piecewise_contruct for passing arguments to each part of the pair constructor).
  • Returns β€” An iterator that points to the element with key of the std::pair built from __args (may or may not be that std::pair).

This function is not concerned about whether the insertion took place, and thus does not return a boolean like the single-argument emplace() does. Note that the first parameter is only a hint and can potentially improve the performance of the insertion process. A bad hint would cause no gains in efficiency πŸ™ˆ β€” so like, don't stress if your hint is mid, it just won't help.

See https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints for more on hinting.

Insertion requires logarithmic time (if the hint is not taken).

Referenced by std::map<_Key, _Tp, _Compare, _Alloc>::emplace(), std::map<_Key, _Tp, _Compare, _Alloc>::insert(), std::map<_Key, _Tp, _Compare, _Alloc>::insert_or_assign(), std::map<_Key, _Tp, _Compare, _Alloc>::insert_or_assign(), std::map<_Key, _Tp, _Compare, _Alloc>::try_emplace(), and std::map<_Key, _Tp, _Compare, _Alloc>::try_emplace().


πŸ“ empty

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
bool std::map<_Key, _Tp, _Compare, _Alloc>::empty() const [inline], [noexcept]

Returns true if the map is empty. (Thus begin() would equal end().) vibe check: is the map serving nothing? then yes πŸ”₯


πŸ’œ end (const)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
const_iterator std::map<_Key, _Tp, _Compare, _Alloc>::end() const [inline], [noexcept]

Returns a read-only (constant) iterator that points one past the last pair in the map. Iteration is done in ascending order according to the keys. it's the end-of-the-line rope, you do NOT dereference it, periodt πŸ’€


πŸ‘‘ end (non-const)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
iterator std::map<_Key, _Tp, _Compare, _Alloc>::end() [inline], [noexcept]

Returns a read/write iterator that points one past the last pair in the map. Iteration is done in ascending order according to the keys.

Referenced by std::map<_Key, _Tp, _Compare, _Alloc>::at(), std::map<_Key, _Tp, _Compare, _Alloc>::emplace(), std::map<_Key, _Tp, _Compare, _Alloc>::extract(), std::map<_Key, _Tp, _Compare, _Alloc>::insert(), std::map<_Key, _Tp, _Compare, _Alloc>::insert_or_assign(), std::map<_Key, _Tp, _Compare, _Alloc>::operator[](), and std::map<_Key, _Tp, _Compare, _Alloc>::try_emplace().


🌈 equal_range (transparent, non-const)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
template<typename _Kt>
auto std::map<_Key, _Tp, _Compare, _Alloc>::equal_range(const _Kt& __x)
  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
        [inline]

Finds a subsequence matching given key. it's giving "find me the whole matching squad" πŸŽ€

  • Parameters β€” __x: Key of (key, value) pairs to be located.
  • Returns β€” Pair of iterators that possibly points to the subsequence matching given key.

This function is equivalent to

std::make_pair(c.lower_bound(val),
               c.upper_bound(val))

(but is faster than making the calls separately ⚑).

This function probably only makes sense for multimaps.


⭐ equal_range (transparent, const)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
template<typename _Kt>
auto std::map<_Key, _Tp, _Compare, _Alloc>::equal_range(const _Kt& __x) const
  -> decltype(pair<const_iterator, const_iterator>(
              _M_t._M_equal_range_tr(__x)))     [inline]

Finds a subsequence matching given key.

  • Parameters β€” __x: Key of (key, value) pairs to be located.
  • Returns β€” Pair of read-only (constant) iterators that possibly points to the subsequence matching given key.

This function is equivalent to

std::make_pair(c.lower_bound(val),
               c.upper_bound(val))

(but is faster than making the calls separately).

This function probably only makes sense for multimaps.


πŸ’« equal_range (key_type, non-const)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
std::pair<iterator, iterator> std::map<_Key, _Tp, _Compare, _Alloc>::equal_range(const key_type& __x) [inline]

Finds a subsequence matching given key.

  • Parameters β€” __x: Key of (key, value) pairs to be located.
  • Returns β€” Pair of iterators that possibly points to the subsequence matching given key.

This function is equivalent to

std::make_pair(c.lower_bound(val),
               c.upper_bound(val))

(but is faster than making the calls separately).

This function probably only makes sense for multimaps.


🧚 equal_range (key_type, const)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
std::pair<const_iterator, const_iterator> std::map<_Key, _Tp, _Compare, _Alloc>::equal_range(const key_type& __x) const [inline]

Finds a subsequence matching given key.

  • Parameters β€” __x: Key of (key, value) pairs to be located.
  • Returns β€” Pair of read-only (constant) iterators that possibly points to the subsequence matching given key.

This function is equivalent to

std::make_pair(c.lower_bound(val),
               c.upper_bound(val))

(but is faster than making the calls separately).

This function probably only makes sense for multimaps.


πŸ’… erase (by key)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
size_type std::map<_Key, _Tp, _Compare, _Alloc>::erase(const key_type& __x) [inline]

Erases elements according to the provided key. goodbye bestie, you're off the list 🫢

  • Parameters β€” __x: Key of element to be erased.
  • Returns β€” The number of elements erased.

This function erases all the elements located by the given key from a map.

okay super important caveat: this function only erases the element, and if the element is itself a pointer, the pointed-to memory is not touched in any way. Managing the pointer is the user's responsibility. like, she'll delete the pointer but she will NOT delete the thing it points to. that's on you, bestie 😭

πŸ”₯ erase (range)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
iterator std::map<_Key, _Tp, _Compare, _Alloc>::erase(const_iterator __first, const_iterator __last) [inline]

Erases a [first,last) range of elements from a map. mass unfollow, but make it iterators πŸ’€

  • Parameters
    • __first: Iterator pointing to the start of the range to be erased.
    • __last: Iterator pointing to the end of the range to be erased.
  • Returns β€” The iterator __last.

This function erases a sequence of elements from a map.

same warning as above: this function only erases the element, and if the element is itself a pointer, the pointed-to memory is not touched in any way. Managing the pointer is the user's responsibility.

🌸 erase (single position)

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
         typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
iterator std::map<_Key, _Tp, _Compare, _Alloc>::erase(const_iterator __position) [inline]

Erases an element from a map β€” just the one, lowkey surgical πŸŽ€

  • Parameters β€” __position: An iterator pointing to the element to be erased.
  • Returns β€” An iterator pointing to the element immediately following position prior to the element being erased. If no such element exists, end() is returned. so you always get a valid next stop, no dangling vibes ✨

so like… this note applies to that erase we just talked about, and honestly it's the kind of thing that will bite you if you don't read it:

This function erases an element, pointed to by the given iterator, from a map. Note that this function only erases the element, and that if the element is itself a pointer, the pointed-to memory is not touched in any way. Managing the pointer is the user's responsibility. like bestie the map is NOT your free() πŸ’…


✨ erase (iterator overload)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> _GLIBCXX_ABI_TAG_CXX11 iterator std::map< _Key, _Tp, _Compare, _Alloc >::erase (iterator __position) [inline]

Erases an element from a map. bye bestie πŸ‘‹

Parameters

  • __position β€” an iterator pointing to the element to be erased.

Returns

An iterator pointing to the element immediately following position prior to the element being erased. If no such element exists, end() is returned.

This function erases an element, pointed to by the given iterator, from a map. Note that this function only erases the element, and that if the element is itself a pointer, the pointed-to memory is not touched in any way. Managing the pointer is the user's responsibility.

fr fr though β€” erasing the element does NOT delete whatever it points at. That's on you, no cap. 🫢

πŸ¦‹ extract (key overload)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> node_type std::map< _Key, _Tp, _Compare, _Alloc >::extract (const key_type & __x) [inline]

Extract a node. pluck it right out, iconically πŸŽ€


πŸ¦‹ extract (iterator overload)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> node_type std::map< _Key, _Tp, _Compare, _Alloc >::extract (const_iterator __pos) [inline]

Extract a node.

References: std::map< _Key, _Tp, _Compare, _Alloc >::end().


πŸ” find (transparent key, non-const)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> template<typename _Kt > auto std::map< _Key, _Tp, _Compare, _Alloc >::find (const _Kt & __x) -> decltype(_M_t._M_find_tr(__x)) [inline]

Tries to locate an element in a map. detective mode activated πŸ”Ž

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

Iterator pointing to sought-after element, or end() if not found.

This function takes a key and tries to locate the element with which the key matches. If successful the function returns an iterator pointing to the sought after pair. If unsuccessful it returns the past-the-end (end()) iterator.


πŸ” find (transparent key, const)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> template<typename _Kt > auto std::map< _Key, _Tp, _Compare, _Alloc >::find (const _Kt & __x) const -> decltype(_M_t._M_find_tr(__x)) [inline]

Tries to locate an element in a map. same mission, but the read-only cut πŸ’œ

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

Read-only (constant) iterator pointing to sought-after element, or end() if not found.

This function takes a key and tries to locate the element with which the key matches. If successful the function returns a constant iterator pointing to the sought after pair. If unsuccessful it returns the past-the-end (end()) iterator.


πŸ” find (key_type, non-const)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> iterator std::map< _Key, _Tp, _Compare, _Alloc >::find (const key_type & __x) [inline]

Tries to locate an element in a map.

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

Iterator pointing to sought-after element, or end() if not found.

This function takes a key and tries to locate the element with which the key matches. If successful the function returns an iterator pointing to the sought after pair. If unsuccessful it returns the past-the-end (end()) iterator.


πŸ” find (key_type, const)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> const_iterator std::map< _Key, _Tp, _Compare, _Alloc >::find (const key_type & __x) const [inline]

Tries to locate an element in a map. const-flavoured, still slaying ✨

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

Read-only (constant) iterator pointing to sought-after element, or end() if not found.

This function takes a key and tries to locate the element with which the key matches. If successful the function returns a constant iterator pointing to the sought after pair. If unsuccessful it returns the past-the-end (end()) iterator.


πŸŽ€ get_allocator

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> allocator_type std::map< _Key, _Tp, _Compare, _Alloc >::get_allocator () const [inline],  [noexcept]

Get a copy of the memory allocation object. a little copy of the allocator, cute 🫢


🌸 insert (range)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> template<typename _InputIterator > void std::map< _Key, _Tp, _Compare, _Alloc >::insert (_InputIterator __first, _InputIterator __last) [inline]

Template function that attempts to insert a range of elements. bulk insert, we love a group project πŸ’–

Parameters

  • __first β€” iterator pointing to the start of the range to be inserted.
  • __last β€” iterator pointing to the end of the range.

Complexity similar to that of the range constructor.


🌸 insert (perfect-forwarded pair)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> template<typename _Pair > __enable_if_t< is_constructible< value_type, _Pair >::value, pair< iterator, bool > > std::map< _Key, _Tp, _Compare, _Alloc >::insert (_Pair && __x) [inline]

Attempts to insert a std::pair into the map. ✨

Parameters

  • __x β€” pair to be inserted (see std::make_pair for easy creation of pairs).

Returns

A pair, of which the first element is an iterator that points to the possibly inserted pair, and the second is a bool that is true if the pair was actually inserted.

This function attempts to insert a (key, value) pair into the map. A map relies on unique keys and thus a pair is only inserted if its first element (the key) is not already present in the map. no duplicates allowed bestie, this is a members-only situation πŸ‘‘

Insertion requires logarithmic time.

References: std::map< _Key, _Tp, _Compare, _Alloc >::emplace_hint(), std::map< _Key, _Tp, _Compare, _Alloc >::end(), std::map< _Key, _Tp, _Compare, _Alloc >::key_comp(), and std::map< _Key, _Tp, _Compare, _Alloc >::lower_bound().


🌸 insert (const value_type)

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

Attempts to insert a std::pair into the map.

Parameters

  • __x β€” pair to be inserted (see std::make_pair for easy creation of pairs).

Returns

A pair, of which the first element is an iterator that points to the possibly inserted pair, and the second is a bool that is true if the pair was actually inserted.

This function attempts to insert a (key, value) pair into the map. A map relies on unique keys and thus a pair is only inserted if its first element (the key) is not already present in the map.

Insertion requires logarithmic time.


🧚 insert (hint + extracted node)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> iterator std::map< _Key, _Tp, _Compare, _Alloc >::insert (const_iterator __hint, node_type && __nh) [inline]

Re-insert an extracted node. put it back where it belongs πŸŽ€

References: std::move().


🌸 insert (hint + perfect-forwarded pair)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> template<typename _Pair > __enable_if_t< is_constructible< value_type, _Pair >::value, iterator > std::map< _Key, _Tp, _Compare, _Alloc >::insert (const_iterator __position, _Pair && __x) [inline]

Attempts to insert a std::pair into the map.

Parameters

  • __position β€” an iterator that serves as a hint as to where the pair should be inserted.
  • __x β€” pair to be inserted (see std::make_pair for easy creation of pairs).

Returns

An iterator that points to the element with key of __x (may or may not be the pair passed in).

This function is not concerned about whether the insertion took place, and thus does not return a boolean like the single-argument insert() does. Note that the first parameter is only a hint and can potentially improve the performance of the insertion process. A bad hint would cause no gains in efficiency. a bad hint is giving "wrong directions but confidently" 😭

See https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints for more on hinting.

Insertion requires logarithmic time (if the hint is not taken).


🌸 insert (hint + const value_type)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> iterator std::map< _Key, _Tp, _Compare, _Alloc >::insert (const_iterator __position, const value_type & __x) [inline]

Attempts to insert a std::pair into the map.

Parameters

  • __position β€” an iterator that serves as a hint as to where the pair should be inserted.
  • __x β€” pair to be inserted (see std::make_pair for easy creation of pairs).

Returns

An iterator that points to the element with key of __x (may or may not be the pair passed in).

This function is not concerned about whether the insertion took place, and thus does not return a boolean like the single-argument insert() does. Note that the first parameter is only a hint and can potentially improve the performance of the insertion process. A bad hint would cause no gains in efficiency.

See https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints for more on hinting.

Insertion requires logarithmic time (if the hint is not taken).


🌸 insert (hint + value_type &&)

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> iterator std::map< _Key, _Tp, _Compare, _Alloc >::insert (const_iterator __position, value_type && __x) [inline]

Attempts to insert a std::pair into the map. move-semantics edition, we stan πŸ’…

Parameters

  • __position β€” an iterator that serves as a hint as to where the pair should be inserted.
  • __x β€” pair to be inserted (see std::make_pair for easy creation of pairs).

Returns

An iterator that points to the element with key of __x (may or may not be the pair passed in).

...and like, this one genuinely does not care whether the insertion actually took place, so it doesn't hand you back a bool the way the single-argument insert() does. 🫢 Note that the first parameter is only a hint and can potentially improve the performance of the insertion process. A bad hint would cause no gains in efficiency β€” no glow-up, just vibes.

See https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints for more on hinting, iykyk. πŸ“–

Insertion requires logarithmic time (if the hint is not taken).

References std::move().


πŸŽ€ insert(node_type && __nh) β€” re-insert an extracted node

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> insert_return_type std::map< _Key, _Tp, _Compare, _Alloc
    >::insert (node_type && __nh) [inline]

Re-insert an extracted node. πŸ¦‹ Like, you popped a node out of the map earlier and now you're putting it back β€” main character returning to the group chat.

References std::move().

Referenced by std::map< _Key, _Tp, _Compare, _Alloc >::insert(), and std::map< _Key, _Tp, _Compare, _Alloc >::operator[]().


🌸 insert(std::initializer_list<value_type> __list)

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> void std::map< _Key, _Tp, _Compare, _Alloc >::insert
    (std::initializer_list< value_type > __list) [inline]

Attempts to insert a whole list of std::pairs into the map. πŸ’… It's giving "bulk add" energy.

Parameters

  • __list β€” a std::initializer_list<value_type> of pairs to be inserted.

Complexity similar to that of the range constructor.

References std::map< _Key, _Tp, _Compare, _Alloc >::insert().


✨ insert(value_type && __x) β€” the classic

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

Attempts to insert a std::pair into the map. πŸ“

Parameters

  • __x β€” pair to be inserted (see std::make_pair for easy creation of pairs).

Returns

A pair, of which the first element is an iterator that points to the possibly inserted pair, and the second is a bool that is true if the pair was actually inserted.

This function attempts to insert a (key, value) pair into the map. A map relies on unique keys and thus a pair is only inserted if its first element (the key) is not already present in the map β€” no dupes allowed bestie, that's the whole thing. 🚫

Insertion requires logarithmic time.

References std::move().


πŸ’œ insert_or_assign(const key_type & __k, _Obj && __obj)

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> template<typename _Obj > pair< iterator, bool > std::map< _Key,
    _Tp, _Compare, _Alloc >::insert_or_assign (const key_type & __k, _Obj &&
    __obj) [inline]

Attempts to insert or assign a std::pair into the map. πŸ‘‘ The "insert or like… overwrite it, whatever" option.

Parameters

  • __k β€” key to use for finding a possibly existing pair in the map.
  • __obj β€” argument used to generate the .second for a pair instance.

Returns

A pair, of which the first element is an iterator that points to the possibly inserted pair, and the second is a bool that is true if the pair was actually inserted.

This function attempts to insert a (key, value) pair into the map. A map relies on unique keys and thus a pair is only inserted if its first element (the key) is not already present in the map. If the pair was already in the map, the .second of the pair is assigned from __obj. πŸ”₯

Insertion requires logarithmic time.

References std::map< _Key, _Tp, _Compare, _Alloc >::emplace_hint(), std::map< _Key, _Tp, _Compare, _Alloc >::end(), std::forward_as_tuple(), std::map< _Key, _Tp, _Compare, _Alloc >::key_comp(), std::map< _Key, _Tp, _Compare, _Alloc >::lower_bound(), and std::piecewise_construct.


🧚 insert_or_assign(const_iterator __hint, const key_type & __k, _Obj && __obj)

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> template<typename _Obj > iterator std::map< _Key, _Tp, _Compare,
    _Alloc >::insert_or_assign (const_iterator __hint, const key_type & __k,
    _Obj && __obj) [inline]

Attempts to insert or assign a std::pair into the map β€” same deal, but now with a hint. πŸ¦‹

Parameters

  • __hint β€” an iterator that serves as a hint as to where the pair should be inserted.
  • __k β€” key to use for finding a possibly existing pair in the map.
  • __obj β€” argument used to generate the .second for a pair instance.

Returns

An iterator that points to the element with key of __x (may or may not be the pair passed in).

This function attempts to insert a (key, value) pair into the map. A map relies on unique keys and thus a pair is only inserted if its first element (the key) is not already present in the map. If the pair was already in the map, the .second of the pair is assigned from __obj. πŸ’–

Insertion requires logarithmic time.

References std::map< _Key, _Tp, _Compare, _Alloc >::emplace_hint(), std::forward_as_tuple(), and std::piecewise_construct.


🌈 key_comp() const

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> key_compare std::map< _Key, _Tp, _Compare, _Alloc >::key_comp ()
    const [inline]

Returns the key comparison object out of which the map was constructed. πŸŽ€ Like handing you back the little comparator that decided the whole ordering β€” iconic behaviour.

Referenced by std::map< _Key, _Tp, _Compare, _Alloc >::at(), std::map< _Key, _Tp, _Compare, _Alloc >::emplace(), std::map< _Key, _Tp, _Compare, _Alloc >::insert(), std::map< _Key, _Tp, _Compare, _Alloc >::insert_or_assign(), std::map< _Key, _Tp, _Compare, _Alloc >::operator[](), and std::map< _Key, _Tp, _Compare, _Alloc >::try_emplace().


πŸ’« lower_bound(const _Kt & __x) β€” the transparent one

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> template<typename _Kt > auto std::map< _Key, _Tp, _Compare,
    _Alloc >::lower_bound (const _Kt & __x) ->
    decltype(iterator(_M_t._M_lower_bound_tr(__x)))
          [inline]

Finds the beginning of a subsequence matching given key. πŸ”

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

Iterator pointing to first element equal to or greater than key, or end().

This function returns the first element of a subsequence of elements that matches the given key. If unsuccessful it returns an iterator pointing to the first element that has a greater value than given key or end() if no such element exists. ngl that asymmetry is lowkey a lot, but that's the deal. πŸ’€


πŸ¦‹ lower_bound(const _Kt & __x) const β€” transparent, but read-only

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> template<typename _Kt > auto std::map< _Key, _Tp, _Compare,
    _Alloc >::lower_bound (const _Kt & __x) const ->
    decltype(const_iterator(_M_t._M_lower_bound_tr(__x)))
          [inline]

Finds the beginning of a subsequence matching given key. ✨ Not me giving you the const version, you're welcome.

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

Read-only (constant) iterator pointing to first element equal to or greater than key, or end().

This function returns the first element of a subsequence of elements that matches the given key. If unsuccessful it returns an iterator pointing to the first element that has a greater value than given key or end() if no such element exists.


🌸 lower_bound(const key_type & __x) β€” the non-transparent one

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> iterator std::map< _Key, _Tp, _Compare, _Alloc >::lower_bound
    (const key_type & __x) [inline]

Finds the beginning of a subsequence matching given key. 🎯

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

Iterator pointing to first element equal to or greater than key, or end().

This function returns the first element of a subsequence of elements that matches the given key. If unsuccessful it returns an iterator pointing to the first element that has a greater value than given key or end() if no such element exists.

Referenced by std::map< _Key, _Tp, _Compare, _Alloc >::at(), std::map< _Key, _Tp, _Compare, _Alloc >::emplace(), std::map< _Key, _Tp, _Compare, _Alloc >::insert(), std::map< _Key, _Tp, _Compare, _Alloc >::insert_or_assign(), std::map< _Key, _Tp, _Compare, _Alloc >::operator[](), and std::map< _Key, _Tp, _Compare, _Alloc >::try_emplace().


🧊 lower_bound(const key_type & __x) const

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> const_iterator std::map< _Key, _Tp, _Compare, _Alloc
    >::lower_bound (const key_type & __x) const [inline]

Finds the beginning of a subsequence matching given key. πŸ’œ Same energy, except you can't touch anything.

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

Read-only (constant) iterator pointing to first element equal to or greater than key, or end().

This function returns the first element of a subsequence of elements that matches the given key. If unsuccessful it returns an iterator pointing to the first element that has a greater value than given key or end() if no such element exists.


πŸ‘‘ max_size() const

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> size_type std::map< _Key, _Tp, _Compare, _Alloc >::max_size ()
    const [inline],  [noexcept]

Returns the maximum size of the map. 🌈 That's it. That's the whole function. Short and slay. Also it's [noexcept], so it will not throw at you. 🫢


πŸŽ€ operator=(const map< _Key, _Tp, _Compare, _Alloc > &)

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> map & std::map< _Key, _Tp, _Compare, _Alloc >::operator= (const
    map< _Key, _Tp, _Compare, _Alloc > &) [default]

Map assignment operator. πŸ’… Whether the allocator is copied depends on the allocator traits β€” that's a <red>depends on your allocator</red> situation, fr fr, not something this page decides for you.


πŸ“ operator=(initializer_list<value_type> __l)

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> map & std::map< _Key, _Tp, _Compare, _Alloc >::operator=
    (initializer_list< value_type > __l) [inline]

Map list assignment operator. ✨

Parameters

  • __l β€” an initializer_list.

This function fills a map with copies of the elements in the initializer list __l.

Note that the assignment completely changes the map and that the resulting map's size is the same as the number of elements assigned. πŸ’€ Like, the old contents? Gone. Not "merged", not "kept around" β€” completely changed.

πŸ’œ operator=(map< _Key, _Tp, _Compare, _Alloc > &&)

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> map & std::map< _Key, _Tp, _Compare, _Alloc >::operator= (map<
    _Key, _Tp, _Compare, _Alloc > &&) [default]

Move assignment operator. πŸ¦‹ Grabby hands, but make it efficient.


πŸ”₯ operator[](const key_type & __k)

template<typename _Key , typename _Tp , typename _Compare  =
    std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key,
    _Tp> >> mapped_type & std::map< _Key, _Tp, _Compare, _Alloc
    >::operator[] (const key_type & __k) [inline]

Subscript ([]) access to map data. πŸ‘‘ The one everybody uses and everybody loves.

Parameters

  • __k β€” the key for which data should be retrieved.

Returns

A reference to the data of the (key,data) pair. πŸ’–

...and we're picking it right back up, bestie β€” mid-operator[], no intro needed πŸ’…

Allows for easy lookup with the subscript ( [] ) operator. Returns data associated with the key specified in subscript. If the key does not exist, a pair with that key is created using default values, which is then returned.

Lookup requires logarithmic time. πŸ”₯

References: std::map< _Key, _Tp, _Compare, _Alloc >::end(), std::map< _Key, _Tp, _Compare, _Alloc >::insert(), std::map< _Key, _Tp, _Compare, _Alloc >::key_comp(), std::map< _Key, _Tp, _Compare, _Alloc >::lower_bound(), and std::piecewise_construct.


🌸 rbegin β€” the const flex

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> const_reverse_iterator std::map< _Key, _Tp, _Compare, _Alloc >::rbegin () const [inline],  [noexcept]

Returns a read-only (constant) reverse iterator that points to the last pair in the map. Iteration is done in descending order according to the keys. πŸ¦‹

So like β€” you're walking the map backwards, biggest key first, and you can look but not touch. iconic behaviour honestly.

πŸŽ€ rbegin β€” the read/write one

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> reverse_iterator std::map< _Key, _Tp, _Compare, _Alloc >::rbegin () [inline],  [noexcept]

Returns a read/write reverse iterator that points to the last pair in the map. Iteration is done in descending order according to the keys. ✨

Same reverse vibe, except now you can touch. Main character energy.

πŸ’œ rend β€” const version

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> const_reverse_iterator std::map< _Key, _Tp, _Compare, _Alloc >::rend () const [inline],  [noexcept]

Returns a read-only (constant) reverse iterator that points to one before the first pair in the map. Iteration is done in descending order according to the keys. 🧚

One before the first β€” that's the classic "you've gone too far, stop here" sentinel, reverse edition.

🌈 rend β€” read/write version

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> reverse_iterator std::map< _Key, _Tp, _Compare, _Alloc >::rend () [inline],  [noexcept]

Returns a read/write reverse iterator that points to one before the first pair in the map. Iteration is done in descending order according to the keys. ⭐

πŸ“ size

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> size_type std::map< _Key, _Tp, _Compare, _Alloc >::size () const [inline],  [noexcept]

Returns the size of the map. That's it. That's the whole thing. short king behaviour πŸ‘‘

πŸ’€ swap

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> void std::map< _Key, _Tp, _Compare, _Alloc >::swap (map< _Key, _Tp, _Compare, _Alloc > & __x) [inline],  [noexcept]

Swaps data with another map. πŸ”

Parameters

  • __x β€” a map of the same element and allocator types.

This exchanges the elements between two maps in constant time. (It is only swapping a pointer, an integer, and an instance of the Compare type (which itself is often stateless and empty), so it should be quite fast.) Note that the global std::swap() function is specialized such that std::swap(m1,m2) will feed to this function. πŸ”₯

Whether the allocators are swapped depends on the allocator traits. iykyk β€” that's a whole detail, don't sleep on it.

πŸ’‘ bestie note: constant time means it's fast fast. Like, no copying every element. It's giving "trade places, not pack your bags."

🫢 try_emplace β€” the one-arg-ish queen

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> template<typename... _Args> pair< iterator, bool > std::map< _Key, _Tp, _Compare, _Alloc >::try_emplace (const key_type & __k, _Args &&... __args) [inline]

Attempts to build and insert a std::pair into the map. πŸŽ€

Parameters

  • __k β€” key to use for finding a possibly existing pair in the map.
  • __args β€” arguments used to generate the .second for a new pair instance.

Returns

  • A pair, of which the first element is an iterator that points to the possibly inserted pair, and the second is a bool that is true if the pair was actually inserted.

This function attempts to build and insert a (key, value) pair into the map. A map relies on unique keys and thus a pair is only inserted if its first element (the key) is not already present in the map. If a pair is not inserted, this function has no effect. πŸ™ˆ

Insertion requires logarithmic time.

References: std::map< _Key, _Tp, _Compare, _Alloc >::emplace_hint(), std::map< _Key, _Tp, _Compare, _Alloc >::end(), std::forward_as_tuple(), std::map< _Key, _Tp, _Compare, _Alloc >::key_comp(), std::map< _Key, _Tp, _Compare, _Alloc >::lower_bound(), and std::piecewise_construct.

🧚 try_emplace β€” the hint version

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> template<typename... _Args> iterator std::map< _Key, _Tp, _Compare, _Alloc >::try_emplace (const_iterator __hint, const key_type & __k, _Args &&... __args) [inline]

Attempts to build and insert a std::pair into the map. ✨

Parameters

  • __hint β€” an iterator that serves as a hint as to where the pair should be inserted.
  • __k β€” key to use for finding a possibly existing pair in the map.
  • __args β€” arguments used to generate the .second for a new pair instance.

Returns

  • An iterator that points to the element with key of the std::pair built from __args (may or may not be that std::pair).

This function is not concerned about whether the insertion took place, and thus does not return a boolean like the single-argument try_emplace() does. However, if insertion did not take place, this function has no effect. Note that the first parameter is only a hint and can potentially improve the performance of the insertion process. A bad hint would cause no gains in efficiency. πŸ’€

See https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints for more on hinting.

Insertion requires logarithmic time (if the hint is not taken).

References: std::map< _Key, _Tp, _Compare, _Alloc >::emplace_hint(), std::forward_as_tuple(), and std::piecewise_construct.

πŸŽ€ so like β€” the hint is a suggestion, not a demand. Give it a good one and it slays, give it a bad one and it just gets ignored. No cap.

🌸 upper_bound β€” the template _Kt one

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> template<typename _Kt > auto std::map< _Key, _Tp, _Compare, _Alloc >::upper_bound (const _Kt & __x) -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) [inline]"

Finds the end of a subsequence matching given key. πŸ”

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

  • Iterator pointing to the first element greater than key, or end().

πŸ’œ upper_bound β€” the const template _Kt one

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> template<typename _Kt > auto std::map< _Key, _Tp, _Compare, _Alloc >::upper_bound (const _Kt & __x) const -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x))) [inline]"

Finds the end of a subsequence matching given key. πŸ”

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

  • Read-only (constant) iterator pointing to first iterator greater than key, or end().

🌈 upper_bound β€” plain key_type, non-const

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> iterator std::map< _Key, _Tp, _Compare, _Alloc >::upper_bound (const key_type & __x) [inline]

Finds the end of a subsequence matching given key. ⭐

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

  • Iterator pointing to the first element greater than key, or end().

πŸ“ upper_bound β€” plain key_type, const

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> const_iterator std::map< _Key, _Tp, _Compare, _Alloc >::upper_bound (const key_type & __x) const [inline]

Finds the end of a subsequence matching given key. πŸ¦‹

Parameters

  • __x β€” key of (key, value) pair to be located.

Returns

  • Read-only (constant) iterator pointing to first iterator greater than key, or end().

πŸŽ€ value_comp

template<typename _Key , typename _Tp , typename _Compare  = std::less<_Key>, typename _Alloc  = std::allocator<std::pair<const _Key, _Tp> >> value_compare std::map< _Key, _Tp, _Compare, _Alloc >::value_comp () const [inline]

Returns a value comparison object, built from the key comparison object out of which the map was constructed. πŸ‘‘

Like, it hands you the comparator the map was literally born with. pass it around, it's yours now.


πŸ‘‘ Author

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


That's a wrap on the whole page, bestie! πŸŽ‰ This lil' masterpiece came to you from libstdc++, page std::map< _Key, _Tp, _Compare, _Alloc >(3cxx) β€” yes the footer really does look like libstdstd::map< _Key...mpare, _Alloc >(3cxx) and yes we love them for it πŸ’–. Give your map a lil' kiss goodnight, go touch some grass, and remember: unique keys, logarithmic lookups, and you β€” unstoppable βœ¨πŸ«ΆπŸ’…

πŸ“¦ where this page comes from