std::multiset<Key,Compare,Allocator>::erase
Von cppreference.com
| (1) | ||
iterator erase( iterator pos ); |
(bis C++23) | |
| iterator erase( iterator pos ) requires(!std::same_as<iterator, const_iterator>); |
(seit C++23) | |
| 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. Die Reihenfolge der verbleibenden äquivalenten Elemente wird beibehalten.
1,2) Entfernt das Element an der Position pos. Nur eine Überladung wird bereitgestellt, wenn
iterator und const_iterator vom gleichen Typ sind.(seit C++11)3) Entfernt die Elemente im Bereich
[first, last), was ein gültiger Bereich in *this sein muss.4) Entfernt alle Elemente mit dem Schlüssel, der 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. Somit kann der end() Iterator (der 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.
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 multiset
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 <set> #include <iostream> int main() { std::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(); }
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 }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 371 | C++98 | die Reihenfolge von äquivalenten Elementen, die nicht entfernt wurden, war nicht garantiert erhalten |
musste erhalten bleiben |
| 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) |