std::multiset<Key,Compare,Allocator>:: operator=
|
multiset
&
operator
=
(
const
multiset
&
other
)
;
|
(1) | (constexpr depuis C++26) |
| (2) | ||
|
multiset
&
operator
=
(
multiset
&&
other
)
;
|
(depuis C++11)
(jusqu'à C++17) |
|
|
multiset
&
operator
=
(
multiset
&&
other
)
noexcept ( /* voir ci-dessous */ ) ; |
(depuis C++17)
(constexpr depuis C++26) |
|
|
multiset
&
operator
=
(
std::
initializer_list
<
value_type
>
ilist
)
;
|
(3) |
(depuis C++11)
(constexpr depuis C++26) |
Remplace le contenu du conteneur.
Soit
traits
le
std::
allocator_traits
<
allocator_type
>
:
|
Si traits :: propagate_on_container_copy_assignment :: value est true , l'allocateur de * this est remplacé par une copie de other . Si l'allocateur de * this après l'affectation se compare comme inégal à son ancienne valeur, l'ancien allocateur est utilisé pour désallouer la mémoire, puis le nouvel allocateur est utilisé pour l'allouer avant de copier les éléments. Sinon, la mémoire appartenant à * this peut être réutilisée lorsque possible. Dans tous les cas, les éléments appartenant initialement à * this peuvent être soit détruits soit remplacés par une copie par affectation élément par élément. |
(depuis C++11) |
ContenuParamètres
Valeur de retour* this Complexité
1)
Linéaire dans la taille de
*
this
et
other
.
2)
Linéaire dans la taille de
*
this
sauf si les allocateurs ne sont pas égaux et ne se propagent pas, auquel cas linéaire dans la taille de
*
this
et
other
.
3)
O(N·log(N))
en général, où
N
est
size
(
)
+
ilist.
size
(
)
. Linéaire si
ilist
est trié par rapport à
value_comp()
.
Exceptions
NotesAprès l'affectation par déplacement du conteneur (surcharge (2)), à moins que l'affectation par déplacement élément par élément ne soit forcée par des allocateurs incompatibles, les références, pointeurs et itérateurs qui référençaient à l'origine des éléments dans ExempleLe code suivant utilise operator = pour assigner un std::multiset à un autre :
Exécuter ce code
#include <initializer_list> #include <iostream> #include <iterator> #include <set> void print(const auto comment, const auto& container) { auto size = std::size(container); std::cout << comment << "{ "; for (const auto& element : container) std::cout << element << (--size ? ", " : " "); std::cout << "}\n"; } int main() { std::multiset<int> x{1, 2, 3}, y, z; const auto w = {4, 5, 6, 7}; std::cout << "Initially:\n"; print("x = ", x); print("y = ", y); print("z = ", z); std::cout << "Copy assignment copies data from x to y:\n"; y = x; print("x = ", x); print("y = ", y); std::cout << "Move assignment moves data from x to z, modifying both x and z:\n"; z = std::move(x); print("x = ", x); print("z = ", z); std::cout << "Assignment of initializer_list w to z:\n"; z = w; print("w = ", w); print("z = ", z); } Sortie : Initially:
x = { 1, 2, 3 }
y = { }
z = { }
Copy assignment copies data from x to y:
x = { 1, 2, 3 }
y = { 1, 2, 3 }
Move assignment moves data from x to z, modifying both x and z:
x = { }
z = { 1, 2, 3 }
Assignment of initializer_list w to z:
w = { 4, 5, 6, 7 }
z = { 4, 5, 6, 7 }
Voir aussi
|