std::multiset<Key,Compare,Allocator>:: operator=
|
multiset
&
operator
=
(
const
multiset
&
other
)
;
|
(1) | (constexpr seit C++26) |
| (2) | ||
|
multiset
&
operator
=
(
multiset
&&
other
)
;
|
(seit C++11)
(bis C++17) |
|
|
multiset
&
operator
=
(
multiset
&&
other
)
noexcept ( /* siehe unten */ ) ; |
(seit C++17)
(constexpr seit C++26) |
|
|
multiset
&
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
>
:
|
Wenn traits :: propagate_on_container_copy_assignment :: value true ist, wird der Allokator von * this durch eine Kopie von other ersetzt. Wenn der Allokator von * this nach der Zuweisung ungleich zu seinem alten Wert verglichen würde, wird der alte Allokator zur Freigabe des Speichers verwendet, danach wird der neue Allokator zur Allokierung verwendet, bevor die Elemente kopiert werden. Andernfalls kann der von * this verwaltete Speicher bei Möglichkeit 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) |
InhaltParameter
Rückgabewert* this Komplexität
1)
Linear in der Größe von
*
this
und
other
.
2)
Linear in der Größe von
*
this
, es sei denn, die Allokatoren vergleichen nicht gleich und propagieren nicht, in welchem Fall linear in der Größe von
*
this
und
other
.
3)
O(N·log(N))
im Allgemeinen, wobei
N
gleich
size
(
)
+
ilist.
size
(
)
ist. Linear, falls
ilist
bezüglich
value_comp()
sortiert ist.
Ausnahmen
AnmerkungenNach der Container-Verschiebungszuweisung (Überladung (2)), es sei denn, die elementweise Verschiebungszuweisung wird durch inkompatible Allokatoren erzwungen, bleiben Referenzen, Zeiger und Iteratoren, die ursprünglich auf Elemente in BeispielDer folgende Code verwendet den operator = , um ein std::multiset einem anderen zuzuweisen:
Code ausführen
#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); } Ausgabe: 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 }
Siehe auch
|