Namespaces
Variants

std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: insert

From cppreference.net
std:: pair < iterator, bool > insert ( const value_type & value ) ;
(1) (seit C++23)
std:: pair < iterator, bool > insert ( value_type && value ) ;
(2) (seit C++23)
iterator insert ( const_iterator pos, const value_type & value ) ;
(3) (seit C++23)
iterator insert ( const_iterator pos, value_type && value ) ;
(4) (seit C++23)
template < class P >
std:: pair < iterator, bool > insert ( P && x ) ;
(5) (seit C++23)
template < class P >
iterator insert ( const_iterator pos, P && x ) ;
(6) (seit C++23)
template < class InputIt >
void insert ( InputIt first, InputIt last ) ;
(7) (seit C++23)
template < class InputIt >
void insert ( std:: sorted_unique_t , InputIt first, InputIt last ) ;
(8) (seit C++23)
void insert ( std:: initializer_list < key_type > ilist ) ;
(9) (seit C++23)
void insert ( std:: sorted_unique_t s, std:: initializer_list < key_type > ilist ) ;
(10) (seit C++23)

Fügt Element(e) in den Container ein, falls der Container noch kein Element mit einem äquivalenten Schlüssel enthält.

1) Fügt value ein. Entspricht return emplace ( value ) ; .
2) Fügt value ein. Entspricht return emplace ( std :: move ( value ) ) ; .
3) Fügt value an einer Position ein, die so nah wie möglich an der Position direkt vor pos liegt. Entspricht return emplace_hint ( pos, value ) ; .
4) Fügt value an einer Position ein, die so nah wie möglich an der Position direkt vor pos liegt. Entspricht return emplace_hint ( pos, std :: move ( value ) ) ; .
5) Falls * this bereits ein Element enthält, das transparent als äquivalent zu x verglichen wird, tut dies nichts. Andernfalls fügt x in * this ein, als ob durch emplace ( std:: forward < P > ( x ) ) ; . Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn std:: is_constructible_v < std:: pair < key_type, mapped_type > , P > true ist.
6) Falls * this bereits ein Element enthält, das transparent als äquivalent zu x verglichen wird, tut es nichts. Andernfalls fügt es x in * this an einer Position so nah wie möglich vor pos ein. Entspricht return emplace_hint ( pos, std:: forward < P > ( x ) ) ; . Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn std:: is_constructible_v < std:: pair < key_type, mapped_type > , P > true ist.
7) Fügt Elemente aus dem Bereich [ first , last ) ein, als ob die folgenden Operationen sequenziell ausgeführt würden:
  1. Fügt Elemente zu c hinzu, als ob durch
    for ( ; first ! = last ; ++ first )
    {
    value_type value = * first ;
    c. keys . insert ( c. keys . end ( ) , std :: move ( value. first ) ) ;
    c. values . insert ( c. values . end ( ) , std :: move ( value. second ) ) ;
    }
  2. Sortiert den Bereich der neu eingefügten Elemente bezüglich value_comp .
  3. Führt den resultierenden sortierten Bereich und den sortierten Bereich der vorhandenen Elemente zu einem einzigen sortierten Bereich zusammen.
  4. Löscht die doppelten Elemente als ob durch:
    auto zv = std :: views:: zip ( c. keys , c. values ) ;
    auto it = ranges:: unique ( zv, key_equiv ( compare ) ) . begin ( ) ;
    auto dist = std:: distance ( zv. begin ( ) , it ) ;
    c. keys . erase ( c. keys . begin ( ) + dist, c. keys . end ( ) ) ;
    c. values . erase ( c. values . begin ( ) + dist, c. values . end ( ) ) ;
Kann während des In-Place-Merge-Vorgangs Speicher allozieren.
Wenn mehrere Elemente im Bereich Schlüssel haben, die äquivalent verglichen werden, ist nicht spezifiziert, welches Element eingefügt wird (ausstehend LWG2844 ).
8) Fügt Elemente aus dem Bereich [ first , last ) ein, als ob die folgenden Operationen sequenziell ausgeführt würden:
  1. Fügt Elemente zu c hinzu, als ob durch
    for ( ; first ! = last ; ++ first )
    {
    value_type value = * first ;
    c. keys . insert ( c. keys . end ( ) , std :: move ( value. first ) ) ;
    c. values . insert ( c. values . end ( ) , std :: move ( value. second ) ) ;
    }
  2. Führt den sortierten Bereich der neu hinzugefügten Elemente und den sortierten Bereich der bereits vorhandenen Elemente zu einem einzigen sortierten Bereich zusammen.
  3. Löscht die doppelten Elemente als ob durch:
    auto zv = std :: views:: zip ( c. keys , c. values ) ;
    auto it = ranges:: unique ( zv, key_equiv ( compare ) ) . begin ( ) ;
    auto dist = std:: distance ( zv. begin ( ) , it ) ;
    c. keys . erase ( c. keys . begin ( ) + dist, c. keys . end ( ) ) ;
    c. values . erase ( c. values . begin ( ) + dist, c. values . end ( ) ) ;
Kann während des In-Place-Merge-Vorgangs Speicher allozieren.
Wenn mehrere Elemente im Bereich Schlüssel haben, die äquivalent vergleichen, ist nicht spezifiziert, welches Element eingefügt wird (ausstehend LWG2844 ).
9) Fügt Elemente aus der Initialisierungsliste ilist ein. Entspricht insert ( ilist. begin ( ) , ilist. end ( ) ) ; .
Wenn mehrere Elemente im Bereich Schlüssel haben, die äquivalent verglichen werden, ist nicht spezifiziert, welches Element eingefügt wird (ausstehend LWG2844 ).
10) Fügt Elemente aus der Initialisierungsliste ilist ein. Entspricht insert ( s, ilist. begin ( ) , ilist. end ( ) ) ; .
Wenn mehrere Elemente im Bereich Schlüssel haben, die äquivalent verglichen werden, ist nicht spezifiziert, welches Element eingefügt wird (ausstehend LWG2844 ).

Inhaltsverzeichnis

Parameter

pos - ein Iterator auf die Position, vor der das neue Element eingefügt wird
value - ein einzufügender Elementwert
first, last - das Iteratorpaar, das den Quell- Bereich der einzufügenden Elemente definiert
ilist - eine Initialisierungsliste, aus der die Werte eingefügt werden
x - ein Wert beliebigen Typs, der transparent mit einem Schlüssel verglichen werden kann
s - ein Disambiguierungs-Tag, das anzeigt, dass die Eingabesequenz sortiert ist (bezüglich value_comp() ) und nur eindeutige Elemente enthält
Typanforderungen
-
InputIt muss die Anforderungen von LegacyInputIterator erfüllen.

Rückgabewert

1,2) Ein Paar bestehend aus einem Iterator zum eingefügten Element (oder zum Element, das die Einfügung verhindert hat) und einem bool -Wert, der auf true gesetzt ist, genau dann wenn die Einfügung stattgefunden hat.
3,4) Ein Iterator zum eingefügten Element oder zum Element, das die Einfügung verhindert hat.
5) Ein Paar bestehend aus einem Iterator zum eingefügten Element (oder zum Element, das die Einfügung verhinderte) und einem bool -Wert, der auf true gesetzt ist, genau dann wenn die Einfügung stattgefunden hat.
6) Ein Iterator zum eingefügten Element oder zum Element, das die Einfügung verhindert hat.
7-10) (keine)

Exceptions

1-6) Wenn eine Ausnahme durch einen beliebigen Vorgang ausgelöst wird, hat das Einfügen keine Auswirkung.

Komplexität

1-6) Linear in size() .
7) N + M·log ( M ) , wobei N die size() vor dem Vorgang ist und M std:: distance ( first, last ) ist.
8) Linear in size() .
9) N + M·log ( M ) , wobei N die size() vor dem Vorgang ist und M ilist. size ( ) ist.
10) Linear in N , where N is size() after the operation.

Hinweise

Das angehinte Einfügen ( ( 3,4 ) und ( 6 ) ) gibt kein Boolean zurück, um signaturkompatibel mit positionellem Einfügen in sequentiellen Containern wie std::vector::insert zu sein. Dies ermöglicht die Erstellung generischer Einfüger wie std::inserter . Eine Möglichkeit, den Erfolg eines angehinten Einfügens zu überprüfen, ist der Vergleich von size() vorher und nachher.

Beispiel

Siehe auch

Konstruiert Element direkt vor Ort
(öffentliche Elementfunktion)
Konstruiert Elemente direkt vor Ort mit Hinweis
(öffentliche Elementfunktion)
Fügt ein Element ein oder weist es zu, wenn der Schlüssel bereits existiert
(öffentliche Elementfunktion)
Erstellt einen std::insert_iterator vom vom Argument abgeleiteten Typ
(Funktionstemplate)