std::multimap<Key,T,Compare,Allocator>:: operator=
|
multimap
&
operator
=
(
const
multimap
&
other
)
;
|
(1) | (constexpr seit C++26) |
| (2) | ||
|
multimap
&
operator
=
(
multimap
&&
other
)
;
|
(seit C++11)
(bis C++17) |
|
|
multimap
&
operator
=
(
multimap
&&
other
)
noexcept ( /* siehe unten */ ) ; |
(seit C++17)
(constexpr seit C++26) |
|
|
multimap
&
operator
=
(
std::
initializer_list
<
value_type
>
ilist
)
;
|
(3) |
(seit C++11)
(constexpr seit C++26) |
Ersetzt den Inhalt des Containers.
Sei
traits
gleich
std::
allocator_traits
<
allocator_type
>
:
|
Falls traits :: propagate_on_container_copy_assignment :: value true ist, wird der Allokator von * this durch eine Kopie von other ersetzt. Falls der Allokator von * this nach der Zuweisung ungleich zu seinem alten Wert vergleichen würde, wird der alte Allokator zur Freigabe des Speichers verwendet, danach wird der neue Allokator zur Allokation verwendet bevor die Elemente kopiert werden. Andernfalls kann der von * this verwaltete Speicher wenn möglich wiederverwendet werden. In jedem Fall können die ursprünglich zu * this gehörenden Elemente entweder zerstört oder durch elementweise Kopierzuweisung ersetzt werden. |
(seit C++11) |
Inhaltsverzeichnis |
Parameter
| other | - | ein anderer Container, der als Datenquelle verwendet werden soll |
| ilist | - | Initialisierungsliste, die als Datenquelle verwendet werden soll |
Rückgabewert
* this
Komplexität
Ausnahmen
|
2)
noexcept
Spezifikation:
noexcept
(
std::
allocator_traits
<
Allocator
>
::
is_always_equal
::
value
&& std:: is_nothrow_move_assignable < Compare > :: value ) |
(seit C++17) |
Hinweise
Nach Container-Verschiebungszuweisung (Überladung ( 2 ) ), sofern keine elementweise Verschiebungszuweisung durch inkompatible Allokatoren erzwungen wird, bleiben Referenzen, Zeiger und Iteratoren (außer dem End-Iterator) auf other gültig, verweisen jedoch auf Elemente, die sich nun in * this befinden. Der aktuelle Standard gibt diese Garantie durch die pauschale Aussage in [container.reqmts]/67 , und eine direktere Garantie wird durch LWG issue 2321 geprüft.
Beispiel
Der folgende Code verwendet den operator = , um einen std::multimap einem anderen zuzuweisen:
#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::multimap<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); }
Ausgabe:
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} }
Siehe auch
konstruiert den
multimap
(öffentliche Elementfunktion) |