Namespaces
Variants

std::map<Key,T,Compare,Allocator>:: erase

From cppreference.net

iterator erase ( iterator pos ) ;
(1) (constexpr seit C++26)
iterator erase ( const_iterator pos ) ;
(2) (seit C++11)
(constexpr seit C++26)
(3)
iterator erase ( iterator first, iterator last ) ;
(bis C++11)
iterator erase ( const_iterator first, const_iterator last ) ;
(seit C++11)
(constexpr seit C++26)
size_type erase ( const Key & key ) ;
(4) (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.

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 das Element (falls vorhanden) mit dem Schlüssel, der äquivalent zu key ist.
5) Entfernt alle Elemente, deren Schlüssel äquivalent zum Wert x verglichen werden.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn Compare transparent ist und weder iterator noch const_iterator implizit von K konvertierbar sind. Dies erlaubt den Aufruf dieser Funktion ohne eine Instanz von Key zu konstruieren.

Referenzen und Iteratoren zu den gelöschten Elementen werden ungültig. Andere Referenzen und Iteratoren sind nicht betroffen.

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 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

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

Ausnahmen

1-3) Wirft nichts.
4,5) Alle vom Compare -Objekt ausgelösten Ausnahmen.

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 )

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

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 130 C++98 der Rückgabetyp der Überladungen ( 1 ) und ( 3 ) war void (es ist nicht
konsistent mit der erase() -Anforderung für Sequenzcontainer)
korrigiert zu iterator
LWG 2059 C++11 Ersetzen der Überladung ( 1 ) durch Überladung ( 2 ) führte neue Mehrdeutigkeit ein Überladung ( 1 ) wieder hinzugefügt

Siehe auch

löscht den Inhalt
(öffentliche Elementfunktion)