Namespaces
Variants

std::flat_set<Key,Compare,KeyContainer>:: 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 K >
iterator insert ( const_iterator pos, K && x ) ;
(5) (seit C++23)
template < class InputIt >
void insert ( InputIt first, InputIt last ) ;
(6) (seit C++23)
template < class K >
std:: pair < iterator, bool > insert ( K && x ) ;
(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,7) Falls * this bereits ein Element enthält, das transparent als äquivalent zu x verglichen wird, tut nichts. Andernfalls fügt ein neues Element ein, wie durch:
  • (5) emplace ( pos, std:: forward < K > ( x ) ) (an einer Position so nah wie möglich an der Position direkt vor pos );
  • (7) emplace ( std:: forward < K > ( x ) ) .
Die Konvertierung von x in key_type muss ein Objekt u konstruieren, für das find ( k ) == find ( u ) true ist. Andernfalls ist das Verhalten undefiniert.
Diese Überladungen nehmen nur dann an der Überladungsauflösung teil, wenn
  • Der qualifizierte Bezeichner Compare::is_transparent gültig ist und einen Typ bezeichnet, und
  • std:: is_constructible_v < value_type, K > gleich true ist,
was zusammen ermöglicht, diese Funktion aufzurufen, ohne eine Instanz von Key zu konstruieren.
6) Entspricht der Abfolge der Operationen:
  1. Fügt Elemente aus dem Bereich [ first , last ) ein, als ob durch c. insert ( c. end ( ) , first, last ) ; .
  2. Sortiert den Bereich der neu eingefügten Elemente bezüglich compare .
  3. Führt den resultierenden sortierten Bereich und den sortierten Bereich der bereits vorhandenen Elemente zu einem einzigen sortierten Bereich zusammen. (Hinweis: Der Merge-Vorgang kann Speicher allozieren).
  4. Löscht alle bis auf das erste Element aus jeder Gruppe aufeinanderfolgender äquivalenter Elemente.
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. Entspricht insert ( first, last ) ; .
Wenn mehrere Elemente im Bereich Schlüssel haben, die äquivalent verglichen werden, 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 vergleichen, ist nicht spezifiziert, welches Element eingefügt wird (ausstehend LWG2844 ).

Inhaltsverzeichnis

Parameter

pos - Iterator auf die Position, vor der das neue Element eingefügt wird
value - Einzufügender Elementwert
first, last - Das Iteratorpaar, das den Quell- Bereich der einzufügenden Elemente definiert
ilist - Initialisierungsliste, aus der die Werte eingefügt werden
x - Ein Wert beliebigen Typs, der transparent mit einem Schlüssel verglichen werden kann
s - Ein Unterscheidungs-Tag , das anzeigt, dass die Eingabesequenz sortiert ist (bezüglich compare ) 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-5) Ein Iterator zum eingefügten Element oder zum Element, das die Einfügung verhindert hat.
6) (keine)
7) 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.
8-10) (keine)

Exceptions

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

Komplexität

1,2) Logarithmisch in size() , plus die Kosten für das Einfügen in c .
3-5) Amortisiert konstant, wenn die Einfügung an der Position unmittelbar vor pos erfolgt, andernfalls logarithmisch in size() . Zuzüglich der Kosten für die Einfügung in c .
6) N + M·log ( M ) , wobei N die size() vor dem Vorgang ist und M gleich std:: distance ( first, last ) ist.
7) Logarithmisch in size() , plus den Kosten des Einfügens in c .
8) Linear in N , where N is size() after the operation.
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-5 ) gibt kein Boolean zurück, um signaturkompatibel mit positionellem Einfügen bei sequentiellen Containern wie std::vector::insert zu sein. Dies ermöglicht die Erstellung generischer Inserter wie std::inserter . Eine Möglichkeit den Erfolg eines angehinten Einfügens zu überprüfen ist der Vergleich von size() vorher und nachher.

Beispiel

#include <cassert>
#include <flat_set>
#include <iostream>
int main()
{
    std::flat_set<int> set;
    auto result_1 = set.insert(3);
    assert(result_1.first != set.end()); // es ist ein gültiger Iterator
    assert(*result_1.first == 3);
    if (result_1.second)
        std::cout << "insert done\n";
    auto result_2 = set.insert(3);
    assert(result_2.first == result_1.first); // derselbe Iterator
    assert(*result_2.first == 3);
    if (!result_2.second)
        std::cout << "no insertion\n";
}

Ausgabe:

insert done
no insertion

Siehe auch

Konstruiert Element direkt
(öffentliche Elementfunktion)
Konstruiert Elemente direkt mit Hinweis
(öffentliche Elementfunktion)
Erstellt einen std::insert_iterator vom vom Argument abgeleiteten Typ
(Funktionstemplate)