Namensräume
Varianten
Aktionen

std::set<Key,Compare,Allocator>::erase

Von cppreference.com
< cpp‎ | container‎ | set
 
 
 
 
(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.

1,2) Entfernt das Element an Position pos. Nur eine Überladung wird bereitgestellt, wenn iterator und const_iterator denselben Typ haben.(seit C++11)
3) Entfernt die Elemente im Bereich [firstlast), 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 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 set

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

#include <set>
#include <iostream>
 
int main()
{
    std::set<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 2 3 4 }
Erase all odd numbers:
c = { 2 4 }
Erase 1, erased count: 0
Erase 2, erased count: 1
Erase 2, erased count: 0
c = { 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 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) [edit]