std::set<Key,Compare,Allocator>:: insert
|
std::
pair
<
iterator,
bool
>
insert
(
const
value_type
&
value
)
;
|
(1) | (constexpr depuis C++26) |
|
std::
pair
<
iterator,
bool
>
insert
(
value_type
&&
value
)
;
|
(2) |
(depuis C++11)
(constexpr depuis C++26) |
| (3) | ||
|
iterator insert
(
iterator pos,
const
value_type
&
value
)
;
|
(jusqu'à C++11) | |
|
iterator insert
(
const_iterator pos,
const
value_type
&
value
)
;
|
(depuis C++11)
(constexpr depuis C++26) |
|
|
iterator insert
(
const_iterator pos, value_type
&&
value
)
;
|
(4) |
(depuis C++11)
(constexpr depuis C++26) |
|
template
<
class
InputIt
>
void insert ( InputIt first, InputIt last ) ; |
(5) | (constexpr depuis C++26) |
|
void
insert
(
std::
initializer_list
<
value_type
>
ilist
)
;
|
(6) |
(depuis C++11)
(constexpr depuis C++26) |
|
insert_return_type insert
(
node_type
&&
nh
)
;
|
(7) |
(depuis C++17)
(constexpr depuis C++26) |
|
iterator insert
(
const_iterator pos, node_type
&&
nh
)
;
|
(8) |
(depuis C++17)
(constexpr depuis C++26) |
|
template
<
class
K
>
std:: pair < iterator, bool > insert ( K && x ) ; |
(9) |
(depuis C++23)
(constexpr depuis C++26) |
|
template
<
class
K
>
iterator insert ( const_iterator pos, K && x ) ; |
(10) |
(depuis C++23)
(constexpr depuis C++26) |
Tente d'insérer un ou plusieurs éléments dans * this .
- Si * this contient déjà un élément avec une clé équivalente, ne fait rien.
- Sinon, insère l'élément (ou les éléments) dans * this .
| (depuis C++11) |
[
first
,
last
)
.
|
(depuis C++11) |
- first ou last est un itérateur pointant vers * this .
value_type
avec
std::
forward
<
K
>
(
x
)
puis insère
u
dans
*
this
. L'existence d'une clé équivalente est déterminée de manière transparente en utilisant
x
avant la construction de
u
.
-
value_typen'est pas EmplaceConstructible danssetà partir de std:: forward < K > ( x ) . - equal_range ( u ) == equal_range ( x ) est false .
-
Compareest transparent . - std:: is_convertible_v < K && , const_iterator > est false .
- std:: is_convertible_v < K && , iterator > est false .
Aucun itérateur ni référence n'est invalidé. Si l'insertion réussit, les pointeurs et références vers l'élément obtenus pendant qu'il est détenu dans le node handle sont invalidés, et les pointeurs et références obtenus vers cet élément avant son extraction redeviennent valides. (depuis C++17)
Table des matières |
Paramètres
| pos | - | itérateur vers la position avant laquelle le nouvel élément sera inséré |
| value | - | valeur de l'élément à insérer |
| first, last | - | la paire d'itérateurs définissant la plage source des éléments à insérer |
| ilist | - | liste d'initialisation depuis laquelle insérer les valeurs |
| nh | - | un gestionnaire de nœud compatible |
| x | - | une valeur de tout type pouvant être comparée de manière transparente avec une clé |
| Exigences de type | ||
-
InputIt
doit satisfaire aux exigences de
LegacyInputIterator
.
|
||
Valeur de retour
insert_return_type
avec les membres initialisés comme suit :
-
Si
nh
est vide,
insertedvaut false ,positionest end ( ) , etnodeest vide. -
Sinon, si l'insertion a eu lieu,
insertedvaut true ,positionpointe vers l'élément inséré, etnodeest vide. -
Si l'insertion a échoué,
insertedvaut false ,nodeconserve la valeur précédente de nh , etpositionpointe vers un élément avec une clé équivalente à nh. key ( ) .
Exceptions
Si une exception est levée par une opération quelconque lors de l'insertion d'un seul élément, l'insertion n'a aucun effet.
Complexité
Étant donné N comme size ( ) :
Notes
L'insertion avec indice
(
(
3,4
)
,
(
8
)
et
(
10
)
)
ne retourne pas un booléen afin d'être compatible en signature avec l'insertion positionnelle sur les conteneurs séquentiels, tels que
std::vector::insert
. Cela permet de créer des inserters génériques comme
std::inserter
. Une manière de vérifier le succès d'une insertion avec indice est de comparer
size()
avant et après.
Les surcharges ( 5,6 ) sont souvent implémentées sous forme de boucle appelant la surcharge ( 3 ) avec end() comme indicateur de position ; elles sont optimisées pour l'ajout d'une séquence triée (comme un autre std::set ) dont le plus petit élément est supérieur au dernier élément dans * this .
Si plusieurs éléments de la plage ont des clés équivalentes, il n'est pas spécifié quel élément est inséré (en attente de LWG2844 ).
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_insertion
|
202311L
|
(C++26) | Surcharges hétérogènes pour les fonctions membres restantes dans les conteneurs associatifs ordonnés et les conteneurs associatifs non ordonnés . ( 9,10 ) |
Exemple
#include <cassert> #include <iostream> #include <set> int main() { std::set<int> set; auto result_1 = set.insert(3); assert(result_1.first != set.end()); // c'est un itérateur valide 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); // même itérateur assert(*result_2.first == 3); if (!result_2.second) std::cout << "no insertion\n"; }
Sortie :
insert done no insertion
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement tel que publié | Comportement corrigé |
|---|---|---|---|
| LWG 233 | C++98 | pos n'était qu'une indication, elle pouvait être totalement ignorée |
l'insertion doit être
aussi proche que possible de la position juste avant pos |
| LWG 264 | C++98 |
la complexité de la surcharge
(
5
)
devait être linéaire si
la plage
[
first
,
last
)
est triée selon
Compare
|
supprimé l'exigence de linéarité
dans ce cas particulier |
| LWG 316 | C++98 |
dans la valeur de retour de la surcharge
(
1
)
, il n'était pas spécifié
quelle valeur bool indique une insertion réussie |
le succès est indiqué par true |
Voir aussi
|
(C++11)
|
construit un élément en place
(fonction membre publique) |
|
(C++11)
|
construit des éléments en place en utilisant un indice
(fonction membre publique) |
|
crée un
std::insert_iterator
du type déduit de l'argument
(fonction template) |