std::flat_multiset::erase(3)
β¨ NAME β¨
std::flat_multiset::erase β bestie's official way to yeet elements out of a std::flat_multiset π
(from the C++ Standard Library, aka the manual this page lives in, hi)
πΈ Synopsis πΈ
okay so here's the whole menu of erase flavors, all of them chilling since C++23:
iterator erase( iterator position ); (1)
(since C++23)
iterator erase( const_iterator pos ); (2)
(since C++23)
iterator erase( const_iterator first, const_iterator last ); (3)
(since C++23)
size_type erase( const Key& key ); (4)
(since C++23)
template< class K > (5)
(since C++23)
size_type erase( K&& x );
The tea β: this thing removes specified elements from the container. And the order of the remaining equivalent elements? Preserved. Iconic behavior, no notes. π«Ά
Here's the breakdown by overload:
- ,2. Removes the element at
pos. - Removes the elements in the range
[first, last), which must be a valid range in*this. - Removes all elements with the key equivalent to
key. - 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. (iykyk β transparent comparison is that girl π)
Information on iterator invalidation is copied from here. Literally what the source says, I'm not gonna pretend I have extra lore.
β οΈ okay this part matters bestie: the iteratorposmust be valid and dereferenceable. So theend()iterator (which is valid, but is not dereferenceable) cannot be used as a value forpos. Do not do it. Not even once. π
π 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. Literally nothing. calm vibes only β¨
- 4,5) Any exceptions thrown by the
Compareobject. so if your comparator is messy, that's on it π
π Complexity π
Depends on underlying container. Typically linear.
π§ This section is incomplete Reason: revision required
(not me being transparent about the docs being unfinished, growth mindset fr fr π±)
π₯ Example π₯
// Run this code
#include <flat_set>
#include <iostream>
int main()
{
std::flat_multiset<int> c = {1, 2, 3, 4, 1, 2, 3, 4};
auto print = [&c]
{
std::cout << "c = { ";
for (int n : c)
std::cout << n << ' ';
std::cout << "}\n";
};
print();
std::cout << "Erase all odd numbers:\n";
for (auto it = c.begin(); it != c.end();)
{
if (*it % 2 != 0)
it = c.erase(it);
else
++it;
}
print();
std::cout << "Erase 1, erased count: " << c.erase(1) << '\n';
std::cout << "Erase 2, erased count: " << c.erase(2) << '\n';
std::cout << "Erase 2, erased count: " << c.erase(2) << '\n';
print();
}
look at that loop bestie β it = c.erase(it) vs ++it, the classic erase-during-iteration dance. she ate π
π See also π
clearβ clears the contents (public member function)
π§ Category π§
- Todo with reason
that's the whole page, bestie π β brought to you by http://cppreference.com, dated 2024.06.10. go forth and erase responsibly, 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