std::map::erase(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’… std::map::erase(3) πŸ’…

okay bestie, welcome to the std::map::erase(3) page from the C++ Standard Libary manual β€” yes, that’s the manual name, typo and all 😭. This is the whole erase menu, and every overload is getting its moment ✨.


πŸŽ€ NAME πŸŽ€

std::map::erase β€” std::map::erase. That’s the name, bestie: same thing twice, iconic repetition πŸ’….

✨ Synopsis ✨

Here’s the overload lineup, no cap β€” every single one is invited πŸŽ€:

iterator erase( iterator pos );                                      (1)
iterator erase( const_iterator pos );                                (2) (since C++11)
iterator erase( iterator first, iterator last );                     (3) (until C++11)
iterator erase( const_iterator first, const_iterator last );         (3) (since C++11)
size_type erase( const Key& key );                                   (4)
template< class K >                                                  (5) (since C++23)
size_type erase( K&& x );

Removes specified elements from the container. Slay.

  1. 1,2) β€” removes the element at pos.
  2. 3) β€” removes the elements in the range [first, last), which must be a valid range in *this.
  3. 4) β€” removes the element (if one exists) with the key equivalent to key.
  4. 5) β€” removes all elements with key that compares equivalent to the value x. This overload participates in overload resolution only if the qualified-id Compare::is_transparent is valid and denotes a type, and neither iterator nor const_iterator is implicitly convertible from K. It allows calling this function without constructing an instance of Key.

References and iterators to the erased elements are invalidated. Other references and iterators are not affected. fr fr.

⚠️ bestie, the iterator pos must be valid and dereferenceable. So the end() iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos β€” periodt πŸ’€.

πŸ’– Parameters πŸ’–

  • pos β€” iterator to the element to remove
  • first, last β€” range of elements to remove
  • key β€” key value of the elements to remove
  • x β€” a value of any type that can be transparently compared with a key denoting the elements to remove

🌸 Return value 🌸

  • 1-3) β€” iterator following the last removed element.
  • 4) β€” number of elements removed (0 or 1).
  • 5) β€” number of elements removed.

πŸ¦‹ Exceptions πŸ¦‹

  • 1-3) β€” throws nothing.
  • 4,5) β€” any exceptions thrown by the Compare object.

🧚 Complexity 🧚

Given an instance c of map:

  • 1,2) β€” amortized constant
  • 3) β€” log(c.size()) + std::distance(first, last)
  • 4) β€” log(c.size()) + c.count(key)
  • 5) β€” log(c.size()) + c.count(x)

⭐ Notes ⭐

Feature-test macro tea β˜•οΈ:

  • Feature-test macro: __cpp_lib_associative_heterogeneous_erasure
  • Value: 202110L
  • Std: (C++23)
  • Feature: Heterogeneous erasure in associative containers and unordered associative containers; overload (5)

πŸ“ Example πŸ“

// Run this code

#include <map>
#include <iostream>

int main()
{
    std::map<int, std::string> c =
    {
        {1, "one"}, {2, "two"}, {3, "three"},
        {4, "four"}, {5, "five"}, {6, "six"}
    };

    // erase all odd numbers from c
    for (auto it = c.begin(); it != c.end();)
    {
        if (it->first % 2 != 0)
            it = c.erase(it);
        else
            ++it;
    }

    for (auto& p : c)
        std::cout << p.second << ' ';
    std::cout << '\n';
}

πŸ’œ Output πŸ’œ

two four six

πŸ”₯ Defect reports πŸ”₯

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

  • LWG 130 β€” applied to C++98. Behavior as published: the return type of overloads (1) and (3) was void (it is not consistent with the erase() requirement on sequence containers). Correct behavior: corrected to iterator.
  • LWG 2059 β€” applied to C++11. Behavior as published: replacing overload (1) with overload (2) introduced new ambiguity. Correct behavior: added overload (1) back.

πŸ‘‘ See also πŸ‘‘

  • clear β€” clears the contents (public member function)

xoxo bestie πŸ’– β€” sourced from http://cppreference.com, version/date 2024.06.10, signing off from std::map::erase(3) 🫢

πŸ“¦ where this page comes from