std::map<Key,T,Compare,Allocator>:: operator=
|
map
&
operator
=
(
const
map
&
other
)
;
|
(1) | (constexpr depuis C++26) |
| (2) | ||
|
map
&
operator
=
(
map
&&
other
)
;
|
(depuis C++11)
(jusqu'à C++17) |
|
|
map
&
operator
=
(
map
&&
other
)
noexcept ( /* voir ci-dessous */ ) ; |
(depuis C++17)
(constexpr depuis C++26) |
|
|
map
&
operator
=
(
std::
initializer_list
<
value_type
>
ilist
)
;
|
(3) |
(depuis C++11)
(constexpr depuis C++26) |
Remplace le contenu du conteneur.
Soit
traits
l'expression
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 serait différent de 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) |
Table des matières |
Paramètres
| other | - | autre conteneur à utiliser comme source de données |
| ilist | - | liste d'initialisation à utiliser comme source de données |
Valeur de retour
* this
Complexité
Exceptions
|
2)
noexcept
spécification :
noexcept
(
std::
allocator_traits
<
Allocator
>
::
is_always_equal
::
value
&& std:: is_nothrow_move_assignable < Compare > :: value ) |
(depuis C++17) |
Notes
Après l'affectation par déplacement du conteneur (surcharge ( 2 ) ), sauf si l'affectation par déplacement élément par élément est forcée par des allocateurs incompatibles, les références, pointeurs et itérateurs (à l'exception de l'itérateur de fin) vers other restent valides, mais se réfèrent aux éléments qui se trouvent désormais dans * this . La norme actuelle garantit ceci via l'énoncé général dans [container.reqmts]/67 , et une garantie plus directe est à l'étude via LWG issue 2321 .
Exemple
Le code suivant utilise operator = pour assigner un std::map à un autre :
#include <initializer_list> #include <iostream> #include <iterator> #include <map> #include <utility> void print(const auto comment, const auto& container) { auto size = std::size(container); std::cout << comment << "{ "; for (const auto& [key, value] : container) std::cout << '{' << key << ',' << value << (-- size ? "}, " : "} "); std::cout << "}\n"; } int main() { std::map<int, int> x{{1,1}, {2,2}, {3,3}}, y, z; const auto w = {std::pair<const int, int>{4,4}, {5,5}, {6,6}, {7,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,1}, {2,2}, {3,3} }
y = { }
z = { }
Copy assignment copies data from x to y:
x = { {1,1}, {2,2}, {3,3} }
y = { {1,1}, {2,2}, {3,3} }
Move assignment moves data from x to z, modifying both x and z:
x = { }
z = { {1,1}, {2,2}, {3,3} }
Assignment of initializer_list w to z:
w = { {4,4}, {5,5}, {6,6}, {7,7} }
z = { {4,4}, {5,5}, {6,6}, {7,7} }
Voir aussi
construit la
map
(fonction membre publique) |