std::set<Key,Compare,Allocator>:: insert
|
std::
pair
<
iterator,
bool
>
insert
(
const
value_type
&
value
)
;
|
(1) | (constexpr seit C++26) |
|
std::
pair
<
iterator,
bool
>
insert
(
value_type
&&
value
)
;
|
(2) |
(seit C++11)
(constexpr seit C++26) |
| (3) | ||
|
iterator insert
(
iterator pos,
const
value_type
&
value
)
;
|
(bis C++11) | |
|
iterator insert
(
const_iterator pos,
const
value_type
&
value
)
;
|
(seit C++11)
(constexpr seit C++26) |
|
|
iterator insert
(
const_iterator pos, value_type
&&
value
)
;
|
(4) |
(seit C++11)
(constexpr seit C++26) |
|
template
<
class
InputIt
>
void insert ( InputIt first, InputIt last ) ; |
(5) | (constexpr seit C++26) |
|
void
insert
(
std::
initializer_list
<
value_type
>
ilist
)
;
|
(6) |
(seit C++11)
(constexpr seit C++26) |
|
insert_return_type insert
(
node_type
&&
nh
)
;
|
(7) |
(seit C++17)
(constexpr seit C++26) |
|
iterator insert
(
const_iterator pos, node_type
&&
nh
)
;
|
(8) |
(seit C++17)
(constexpr seit C++26) |
|
template
<
class
K
>
std:: pair < iterator, bool > insert ( K && x ) ; |
(9) |
(seit C++23)
(constexpr seit C++26) |
|
template
<
class
K
>
iterator insert ( const_iterator pos, K && x ) ; |
(10) |
(seit C++23)
(constexpr seit C++26) |
Versucht, Element(e) in * this einzufügen.
- Wenn * this bereits ein Element mit einem äquivalenten Schlüssel enthält, erfolgt keine Aktion.
- Andernfalls werden die Element(e) in * this eingefügt.
| (seit C++11) |
[
first
,
last
)
ein.
|
(seit C++11) |
- first oder last ist ein Iterator in * this .
value_type
mit
std::
forward
<
K
>
(
x
)
und fügt dann
u
in
*
this
ein. Die Existenz eines äquivalenten Schlüssels wird transparent unter Verwendung von
x
bestimmt, bevor
u
konstruiert wird.
-
value_typeist nicht EmplaceConstructible insetaus std:: forward < K > ( x ) . - equal_range ( u ) == equal_range ( x ) ist false .
-
Compareist transparent . - std:: is_convertible_v < K && , const_iterator > ist false .
- std:: is_convertible_v < K && , iterator > ist false .
Keine Iteratoren oder Referenzen werden ungültig. Wenn die Einfügung erfolgreich ist, werden Zeiger und Referenzen auf das Element, die während es im Node-Handle gehalten wurde, ungültig, und Zeiger und Referenzen, die vor dem Extrahieren auf dieses Element erhalten wurden, werden gültig. (seit C++17)
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 |
| nh | - | Ein kompatibles Node Handle |
| x | - | Ein Wert beliebigen Typs, der transparent mit einem Schlüssel verglichen werden kann |
| Typanforderungen | ||
-
InputIt
muss die Anforderungen von
LegacyInputIterator
erfüllen.
|
||
Rückgabewert
insert_return_type
mit den wie folgt initialisierten Mitgliedern:
-
Wenn
nh
leer ist, ist
insertedfalse ,positionist end ( ) , undnodeist leer. -
Andernfalls, wenn die Einfügung stattgefunden hat, ist
insertedtrue ,positionzeigt auf das eingefügte Element, undnodeist leer. -
Wenn die Einfügung fehlgeschlagen ist, ist
insertedfalse ,nodehat den vorherigen Wert von nh , undpositionzeigt auf ein Element mit einem Schlüssel, der äquivalent zu nh. key ( ) ist.
Exceptions
Wenn eine Ausnahme von einer beliebigen Operation während des Einfügens eines einzelnen Elements ausgelöst wird, hat der Einfügevorgang keine Auswirkung.
Komplexität
Gegeben N als size ( ) :
Hinweise
Das angehinte Einfügen
(
(
3,4
)
,
(
8
)
und
(
10
)
)
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()
vor und nach dem Vorgang.
Die Überladungen ( 5,6 ) werden häufig als Schleife implementiert, die die Überladung ( 3 ) mit end() als Hinweis aufruft; sie sind für das Anhängen einer sortierten Sequenz (wie beispielsweise eines anderen std::set ) optimiert, deren kleinstes Element größer ist als das letzte Element in * this .
Wenn mehrere Elemente im Bereich Schlüssel haben, die äquivalent verglichen werden, ist nicht spezifiziert, welches Element eingefügt wird (ausstehend LWG2844 ).
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_insertion
|
202311L
|
(C++26) | Heterogene Überladungen für die verbleibenden Memberfunktionen in geordneten und ungeordneten assoziativen Containern. ( 9,10 ) |
Beispiel
#include <cassert> #include <iostream> #include <set> int main() { std::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); // gleicher Iterator assert(*result_2.first == 3); if (!result_2.second) std::cout << "no insertion\n"; }
Ausgabe:
insert done no insertion
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 233 | C++98 | pos war nur ein Hinweis, konnte komplett ignoriert werden |
Die Einfügung muss so nah wie möglich
an der Position direkt vor pos erfolgen |
| LWG 264 | C++98 |
Die Komplexität der Überladung
(
5
)
musste linear sein, wenn
der Bereich
[
first
,
last
)
gemäß
Compare
sortiert ist
|
Die lineare Anforderung wurde
für diesen Spezialfall entfernt |
| LWG 316 | C++98 |
Beim Rückgabewert der Überladung
(
1
)
war nicht spezifiziert,
welcher bool -Wert eine erfolgreiche Einfügung anzeigt |
Erfolg wird durch true angezeigt |
Siehe auch
|
(C++11)
|
Konstruiert Element direkt an Ort und Stelle
(öffentliche Elementfunktion) |
|
(C++11)
|
Konstruiert Elemente direkt an Ort und Stelle mit Hinweis
(öffentliche Elementfunktion) |
|
Erstellt einen
std::insert_iterator
vom aus dem Argument abgeleiteten Typ
(Funktionstemplate) |