std::map<Key,T,Compare,Allocator>::erase
Von cppreference.com
| iterator erase( iterator pos ); |
(1) | |
| iterator erase( const_iterator pos ); |
(2) | (seit C++11) |
| (3) | ||
iterator erase( iterator first, iterator last ); |
(bis C++11) | |
| iterator erase( const_iterator first, const_iterator last ); |
(seit C++11) | |
| size_type erase( const Key& key ); |
(4) | |
template< class K > size_type erase( K&& x ); |
(5) | (seit C++23) |
Entfernt angegebene Elemente aus dem Container.
1,2) Entfernt das Element an der Position pos.
3) Entfernt die Elemente im Bereich
[first, last), was ein gültiger Bereich in *this sein muss.4) Entfernt das Element (falls vorhanden) mit dem Schlüssel, das zu key äquivalent ist.
5) Entfernt alle Elemente mit einem Schlüssel, der sich äquivalent zum Wert x verhält. Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn der qualifizierte Bezeichner Compare::is_transparent gültig ist und einen Typ bezeichnet und weder
iterator noch const_iterator von K implizit konvertierbar sind. Es ermöglicht das Aufrufen dieser Funktion, ohne eine Instanz von Key zu erstellen.Referenzen und Iteratoren auf die gelöschten Elemente sind ungültig. Andere Referenzen und Iteratoren werden nicht beeinträchtigt.
Der Iterator pos muss gültig und dereferenzierbar sein. Daher kann der end()-Iterator (der zwar gültig, aber nicht dereferenzierbar ist) nicht als Wert für pos verwendet werden.
Inhalt |
[edit] Parameter
| pos | - | Iterator auf das zu entfernende Element |
| first, last | - | Das Iteratorenpaar, das den Bereich der zu entfernenden Elemente definiert |
| key | - | Schlüsselwert der zu entfernenden Elemente |
| x | - | Ein Wert eines beliebigen Typs, der transparent mit einem Schlüssel verglichen werden kann, der die zu entfernenden Elemente bezeichnet |
[edit] Rückgabewert
1-3) Iterator nach dem zuletzt entfernten Element.
4) Anzahl der entfernten Elemente (0 oder 1).
5) Anzahl der entfernten Elemente.
[edit] Ausnahmen
1-3) Wirft nichts.
4,5) Alle Ausnahmen, die vom
Compare-Objekt ausgelöst werden.[edit] Komplexität
Gegeben eine Instanz c von map
1,2) Amortisiert konstant
3) log(c.size()) + std::distance(first, last)
4) log(c.size()) + c.count(key)
5) log(c.size()) + c.count(x)
Anmerkungen
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure |
202110L |
(C++23) | Heterogene Löschung in assoziativen Containern und unordentlichen assoziativen Containern; Überladung (5) |
[edit] Beispiel
Führen Sie diesen Code aus
#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'; }
Ausgabe
two four six
Defect reports
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 130 | C++98 | Der Rückgabetyp der Überladungen (1) und (3) war void (er ist nicht konsistent mit der erase()-Anforderung an Sequenzcontainer) |
korrigiert zu iterator |
| LWG 2059 | C++11 | Der Ersatz der Überladung (1) durch die Überladung (2) führte zu einer neuen Mehrdeutigkeit | Überladung (1) wieder hinzugefügt |
[edit] Siehe auch
| leert den Inhalt (public member function) |