Namespaces
Variants

std::multiset<Key,Compare,Allocator>:: insert

From cppreference.net
iterator insert ( const value_type & value ) ;
(1)
iterator insert ( value_type && value ) ;
(2) (depuis C++11)
(3)
iterator insert ( iterator pos, const value_type & value ) ;
(jusqu'à C++11)
iterator insert ( const_iterator pos, const value_type & value ) ;
(depuis C++11)
iterator insert ( const_iterator pos, value_type && value ) ;
(4) (depuis C++11)
template < class InputIt >
void insert ( InputIt first, InputIt last ) ;
(5)
void insert ( std:: initializer_list < value_type > ilist ) ;
(6) (depuis C++11)
iterator insert ( node_type && nh ) ;
(7) (depuis C++17)
iterator insert ( const_iterator pos, node_type && nh ) ;
(8) (depuis C++17)

Insère un ou plusieurs éléments dans le conteneur. L'ordre des éléments équivalents restants est préservé.

1,2) Insère value . Si le conteneur a des éléments avec une clé équivalente, insère à la limite supérieure de cette plage.
3,4) Insère value à la position aussi proche que possible de la position juste avant pos .
5) Insère les éléments de la plage [ first , last ) .
6) Insère des éléments à partir d'une liste d'initialisation ilist .
7) Si nh est un node handle vide, ne fait rien. Sinon, insère l'élément possédé par nh dans le conteneur et retourne un itérateur pointant vers l'élément inséré. Si une plage contenant des éléments avec des clés équivalentes à nh. key ( ) existe dans le conteneur, l'élément est inséré à la fin de cette plage. Le comportement est indéfini si nh n'est pas vide et get_allocator ( ) ! = nh. get_allocator ( ) .
8) Si nh est un node handle vide, ne fait rien et retourne l'itérateur de fin. Sinon, insère l'élément possédé par nh dans le conteneur, et retourne l'itérateur pointant vers l'élément avec une clé équivalente à nh. key ( ) . L'élément est inséré aussi près que possible de la position juste avant pos . Le comportement est indéfini si nh n'est pas vide et get_allocator ( ) ! = nh. get_allocator ( ) .

Aucun itérateur ou 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 node handle compatible
Exigences de type
-
InputIt doit satisfaire aux exigences de LegacyInputIterator .

Valeur de retour

1-4) Un itérateur vers l'élément inséré.
5,6) (aucun)
7,8) Itérateur de fin si nh était vide, itérateur pointant vers l'élément inséré sinon.

Exceptions

1-4,7,8) Si une exception est levée par une opération quelconque, l'insertion n'a aucun effet.
5,6) Aucune garantie de sûreté vis-à-vis des exceptions.

Complexité

1,2,7) O(log(size()))
3,4,8) Coût amorti constant si l'insertion se produit à la position juste avant pos , O(log(size())) sinon.
5,6) O(N·log(size() + N)) , où N est le nombre d'éléments à insérer.

Exemple

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 publié Comportement corrigé
LWG 233 C++98 pos n'était qu'une indication, pouvant ê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
l'intervalle [first, last) est trié selon Compare
supprimé l'exigence linéaire
dans ce cas particulier
LWG 371 C++98 l'ordre des éléments équivalents n'était pas garanti d'être préservé doit être préservé

Voir aussi

(C++11)
construit un élément en place
(fonction membre publique)
construit des éléments en place en utilisant un indice
(fonction membre publique)
crée un std::insert_iterator dont le type est déduit de l'argument
(modèle de fonction)