std::multimap operator=
- since C++17
- since C++11
- since C++98
// (1) Non const version only
multimap& operator=( const multimap& other );
// (2) Non const version only
multimap& operator=( multimap&& other ) noexcept(/* see below */);
// (3) Non const version only
multimap& operator=( std::initializer_list<value_type> ilist );
// (1) Non const version only
multimap& operator=( const multimap& other );
// (2) Non const version only
multimap& operator=( multimap&& other );
// (3) Non const version only
multimap& operator=( std::initializer_list<value_type> ilist );
// (1) Non const version only
multimap& operator=( const multimap& other );
Replaces the contents of the containter.
Parameters
other
- another container to use as data sourceilist
- initializer list to use as data source
Return value
A reference to the container, *this
.
Exceptions
- since C++17
- until C++17
- (1, 3) May throw implementation-defined exceptions.
- (2) noexcept specification:
noexcept(std::allocator_traits<Allocator>::is_always_equal::value
&& std::is_nothrow_move_assignable<Compare>::value)
May throw implementation-defined exceptions.
Complexity
- (1) Linear in the size of
*this
andother
- O(size() + other.size()). - (2)
Linear in the size of*this
- O(size()). If the allocators do not compare equal and do not propagate - linear in the size of*this
andother
- O(size() + other. - (3)
O(N log N) in general, where N issize() + ilist.size()
. Linear ifilist
is sorted with respect tovalue_comp()
- O(size()).
Notes
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) to other remain valid, but refer to elements that are now in *this
.
The current standard makes this guarantee via the blanket statement in [container.requirements.general]/12
, and a more direct guarantee is under consideration via LWG 2321.
Example
Main.cpp
#include <map>
#include <iterator>
#include <iostream>
#include <utility>
#include <initializer_list>
void print(auto const comment, auto const& container)
{
auto size = std::size(container);
std::cout << comment << "{ ";
for (auto const& [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);
}
Output
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} }
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.
Hover to see the original license.