(C++17) | ||||
Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
Associative | ||||
Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
Adaptors | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
Views | ||||
(C++20) | ||||
(C++23) | ||||
Tables | ||||
Iterator invalidation | ||||
Member function table | ||||
Non-member function table |
Member functions | ||||||||||||
| ||||||||||||
Non-member functions | ||||||||||||
| ||||||||||||
Deduction guides(C++17) |
multiset& operator=(const multiset& other); | (1) | (constexpr since C++26) |
(2) | ||
multiset& operator=( multiset&& other); | (since C++11) (until C++17) | |
multiset& operator=( multiset&& other) noexcept(/* see below */); | (since C++17) (constexpr since C++26) | |
multiset& operator=(std::initializer_list<value_type> ilist); | (3) | (since C++11) (constexpr since C++26) |
Replaces the contents of the container.
Lettraits
bestd::allocator_traits<allocator_type>:
Iftraits::propagate_on_container_copy_assignment::value istrue, the allocator of*this is replaced by a copy ofother. If the allocator of*this after assignment would compare unequal to its old value, the old allocator is used to deallocate the memory, then the new allocator is used to allocate it before copying the elements. Otherwise, the memory owned by*this may be reused when possible. In any case, the elements originally belonging to*this may be either destroyed or replaced by element-wise copy-assignment. | (since C++11) |
Contents |
other | - | another container to use as data source |
ilist | - | initializer list to use as data source |
*this
2) noexcept specification: noexcept(std::allocator_traits<Allocator>::is_always_equal::value &&std::is_nothrow_move_assignable<Compare>::value) | (since C++17) |
After container move assignment (overload(2)), unless element-wise move assignment is forced by incompatible allocators, references, pointers, and iterators (other than the end iterator) toother remain valid, but refer to elements that are now in*this. The current standard makes this guarantee via the blanket statement in[container.reqmts]/67, and a more direct guarantee is under consideration viaLWG issue 2321.
The following code usesoperator= to assign onestd::multiset to another:
#include <initializer_list>#include <iostream>#include <iterator>#include <set> void print(constauto comment,constauto& container){auto size=std::size(container);std::cout<< comment<<"{ ";for(constauto& element: container)std::cout<< element<<(--size?", ":" ");std::cout<<"}\n";} int main(){std::multiset<int> x{1,2,3}, y, z;constauto 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);}
Output:
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 }
constructs themultiset (public member function)[edit] |