std::unordered_multiset<Key,Hash,KeyEqual,Allocator>:: erase
| (1) | ||
|
iterator erase
(
iterator pos
)
;
|
(seit C++11)
(bis C++23) |
|
|
iterator erase
(
iterator pos
)
requires ( ! std:: same_as < iterator, const_iterator > ) ; |
(seit C++23)
(constexpr seit C++26) |
|
|
iterator erase
(
const_iterator pos
)
;
|
(2) |
(seit C++11)
(constexpr seit C++26) |
|
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(3) |
(seit C++11)
(constexpr seit C++26) |
|
size_type erase
(
const
Key
&
key
)
;
|
(4) |
(seit C++11)
(constexpr seit C++26) |
|
template
<
class
K
>
size_type erase ( K && x ) ; |
(5) |
(seit C++23)
(constexpr seit C++26) |
Entfernt bestimmte Elemente aus dem Container. Die Reihenfolge der verbleibenden Elemente bleibt erhalten. (Dies ermöglicht das Löschen einzelner Elemente während der Iteration durch den Container.)
iterator
und
const_iterator
denselben Typ haben.
[
first
,
last
)
, der ein gültiger Bereich in
*
this
sein muss.
Hash
und
KeyEqual
beide
transparent
sind und weder
iterator
noch
const_iterator
implizit von
K
konvertierbar sind. Dies setzt voraus, dass ein solcher
Hash
sowohl mit dem Typ
K
als auch mit dem Typ
Key
aufrufbar ist und dass
KeyEqual
transparent ist, was zusammen den Aufruf dieser Funktion ermöglicht, ohne eine Instanz von
Key
zu konstruieren.
Referenzen und Iteratoren zu den gelöschten Elementen werden ungültig. Andere Iteratoren und Referenzen werden nicht ungültig.
Der Iterator pos muss dereferenzierbar sein. Daher kann der end() -Iterator (der gültig ist, aber nicht dereferenziert werden kann) nicht als Wert für pos verwendet werden.
Inhaltsverzeichnis |
Parameter
| pos | - | Iterator auf das zu entfernende Element |
| first, last | - | Das Iteratorpaar, das den Bereich der zu entfernenden Elemente definiert |
| key | - | Schlüsselwert der zu entfernenden Elemente |
| x | - | Ein Wert beliebigen Typs, der transparent mit einem Schlüssel verglichen werden kann, der die zu entfernenden Elemente bezeichnet |
Rückgabewert
Ausnahmen
Hash
- und
KeyEqual
-Objekt ausgelöst werden.
Komplexität
Gegeben eine Instanz
c
von
unordered_multiset
:
Hinweise
| Feature-Test Makro | Wert | Standard | Funktion |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure
|
202110L
|
(C++23) | Heterogenes Löschen in assoziativen Containern und ungeordneten assoziativen Containern ; Überladung ( 5 ) |
Beispiel
#include <unordered_set> #include <iostream> int main() { std::unordered_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(); }
Mögliche Ausgabe:
c = { 1 1 2 2 3 3 4 4 }
Erase all odd numbers:
c = { 2 2 4 4 }
Erase 1, erased count: 0
Erase 2, erased count: 2
Erase 2, erased count: 0
c = { 4 4 }
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2059 | C++11 | Es bestand Mehrdeutigkeit für Überladung ( 2 ) | Überladung hinzugefügt ( 1 ) |
| LWG 2356 | C++11 |
Die Reihenfolge nicht-äquivalenter Elemente, die
nicht gelöscht wurden, war nicht garantiert erhalten |
muss erhalten bleiben |
Siehe auch
|
löscht den Inhalt
(öffentliche Elementfunktion) |