std::multimap::erase(3)
π std::multimap::erase(3) π
okay bestie, gather round π«Ά this is std::multimap::erase(3) from the C++ Standard Libary manual, and it is literally the βremove these elements from the multimapβ page. No cap, itβs giving cleanup era. β¨
πΈ NAME πΈ
std::multimap::erase - std::multimap::erase. iconic, self-titled, no notes. π
β¨ Synopsis β¨
Hereβs the overload lineup, bestie β every signature stays exactly as written:
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 );
This whole thing removes specified elements from the container. The order of the remaining equivalent elements is preserved β yes maβam, the leftovers keep their order. π
- Overloads (1), (2) β removes the element at
pos. - Overload (3) β removes the elements in the range
[first, last), which must be a valid range in*this. - Overload (4) β removes all elements with the key equivalent to
key. - Overload (5) β removes all elements with key that compares equivalent to the value
x. This overload participates in overload resolution only if the qualified-idCompare::is_transparentis valid and denotes a type, and neitheriteratornorconst_iteratoris implicitly convertible fromK. It allows calling this function without constructing an instance ofKey.
Important vibe check: references and iterators to the erased elements are invalidated. Other references and iterators are not affected. π
Also, 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. Do not try it, bestie, thatβs not the move. π
π Parameters π
posβ iterator to the element to removefirst,lastβ range of elements to removekeyβ key value of the elements to removexβ 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.
- 5) Number of elements removed.
π¦ Exceptions π¦
- 1-3) Throws nothing.
- 4,5) Any exceptions thrown by the
Compareobject.
π₯ Complexity π₯
Given an instance c of multimap:
- 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 time β β hereβs the table content, preserved and perched:
- 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 π
The page says // Run this code, so run it, bestie β itβs the whole demo:
#include <map>
#include <iostream>
int main()
{
std::multimap<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. History really said βwe fixed that later,β and honestly? Slay. π
LWG 130β applied toC++98; behavior as published: the return type of overloads (1) and (3) wasvoid(it is not consistent with theerase()requirement on sequence containers); correct behavior: corrected toiterator.LWG 371β applied toC++98; behavior as published: the order of equivalent elements that are not erased was not guaranteed to be preserved; correct behavior: required to be preserved.LWG 2059β applied toC++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)
lowkey thatβs the whole page, bestie. No cap, every overload, every caveat, every little detail is here and accounted for. π«Ά
<cute sign-off> from http://cppreference.com, version 2024.06.10, page std::multimap::erase(3) β mwah πβ¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms