Namespaces
Variants

std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>:: erase

From cppreference.net

iterator erase ( iterator pos ) ;
(1) (seit C++11)
(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.)

1,2) Entfernt das Element an Position pos .
3) Entfernt die Elemente im Bereich [ first , last ) , der ein gültiger Bereich in * this sein muss.
4) Entfernt alle Elemente mit dem Schlüssel equivalent zu key .
5) Entfernt alle Elemente, deren Schlüssel äquivalent zum Wert x verglichen wird.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn 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 der 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, aber nicht dereferenzierbar ist) nicht als Wert für pos verwendet werden.

Inhaltsverzeichnis

Parameter

pos - Iterator zum zu entfernenden Element
first, last - das Paar von Iteratoren, 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

1-3) Iterator, der dem letzten entfernten Element folgt.
4) Anzahl der entfernten Elemente.
5) Anzahl der entfernten Elemente.

Ausnahmen

1-3) Wirft nichts.
4,5) Alle Ausnahmen, die vom Hash - und KeyEqual -Objekt ausgelöst werden.

Komplexität

Gegeben eine Instanz c von unordered_multimap :

1,2) Durchschnittlicher Fall: konstant, schlechtester Fall: c. size ( ) .
3) Durchschnittlicher Fall: std:: distance ( first, last ) , ungünstigster Fall: c. size ( ) .
4) Durchschnittlicher Fall: c. count ( key ) , schlechtester Fall: c. size ( ) .
5) Durchschnittlicher Fall: c. count ( x ) , schlechtester Fall: c. size ( ) .

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_associative_heterogeneous_erasure 202110L (C++23) Heterogenes Löschen in assoziativen Containern und ungeordneten assoziativen Containern ; Überladung ( 5 )

Beispiel

#include <unordered_map>
#include <iostream>
int main()
{
    std::unordered_multimap<int, std::string> c =
    {
        {1, "one"}, {2, "two"}, {3, "three"},
        {4, "four"}, {5, "five"}, {6, "six"}
    };
    // lösche alle ungeraden Zahlen aus 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';
}

Mögliche Ausgabe:

two four six
**Übersetzungsdetails:** - "Run this code" → "Diesen Code ausführen" - "// erase all odd numbers from c" → "// lösche alle ungeraden Zahlen aus c" - "Possible output:" → "Mögliche Ausgabe:" - HTML-Tags, Attribute und Code innerhalb der `
`-Tags wurden unverändert belassen
- C++-spezifische Begriffe wie "unordered_multimap", "cout", etc. wurden nicht übersetzt
- Die Formatierung und Struktur des Original-HTML wurde vollständig beibehalten

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 2059 C++11 es gab 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)