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_transparentgültig ist und einen Typ bezeichnet, und - std:: is_constructible_v < value_type, K > gleich true ist,
Key
zu konstruieren.
6)
Entspricht der Abfolge der Operationen:
-
Fügt Elemente aus dem Bereich
[first,last)ein, als ob durch c. insert ( c. end ( ) , first, last ) ; . -
Sortiert den Bereich der neu eingefügten Elemente bezüglich
compare. - 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).
- 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
).
| Informationen zur Iterator-Invalidierung sind kopiert von hier |
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.
|
Dieser Abschnitt ist unvollständig
Grund: Fälle 6,8-10 |
Komplexität
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.
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
Diesen Code ausführen
#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) |