std::unorde...p::operator=(3)
π
std::unorde...p::operator=(3) π
okay so welcome to the std::unorde...p::operator=(3) page from the C++ Standard Libary manual β yes bestie, that's literally how the manual name is spelled here, and I'm keeping it. This one is all about replacing what's inside your unordered_map. Let's go. β¨
πΈ NAME πΈ
std::unordered_map::operator= - std::unordered_map::operator=
That's the whole name, no cap.
β¨ Synopsis β¨
Here's the synopsis energy β three overloads, all doing their replacement thing β slay:
unordered_map& operator=( const unordered_map& other ); (1) (since C++11)
unordered_map& operator=( unordered_map&& other ); (2) (since C++11) (until C++17)
unordered_map& operator=( unordered_map&& other ) noexcept(/* see below */); (2) (since C++17)
unordered_map& operator=( std::initializer_list<value_type> ilist ); (3) (since C++11)
Replaces the contents of the container. periodt. π
Overload (2) is giving main character energy with its noexcept glow-up.
π¦ Parameters π¦
otherβ another container to use as data sourceilistβ initializer list to use as data source
π Return value π
*this β that's the return, bestie. π«Ά
π₯ Complexity π₯
- Linear in the size of
*thisandother. - Linear in the size of
*thisunless the allocators do not compare equal and do not propagate, in which case linear in the size of*thisandother. - Linear in the size of
*thisandilist.
This complexity section ate, ngl.
π Exceptions π
- 1-3) May throw implementation-defined exceptions. (until C++17)
- 1,3) May throw implementation-defined exceptions.
- 2)
noexceptspecification (since C++17):
noexcept(std::allocator_traits<Allocator>::is_always_equal::value
&& std::is_nothrow_move_assignable<Hash>::value
&& std::is_nothrow_move_assignable<Pred>::value)
Lowkey important: that's Allocator, Hash, and Pred exactly as written, iykyk. π₯
π 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.reqmts]/67, and a more direct guarantee is under consideration via LWG issue 2321.
The way that guarantee works is iconic, fr fr. Highkey a lot of allocator detail, but it matters.
π Example π
The following code uses operator= to assign one std::unordered_map to another:
// Run this code
#include <initializer_list>
#include <iostream>
#include <iterator>
#include <unordered_map>
#include <utility>
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::unordered_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);
}
π Possible output π
Initially:
x = { {3,3}, {2,2}, {1,1} }
y = { }
z = { }
Copy assignment copies data from x to y:
x = { {3,3}, {2,2}, {1,1} }
y = { {3,3}, {2,2}, {1,1} }
Move assignment moves data from x to z, modifying both x and z:
x = { }
z = { {3,3}, {2,2}, {1,1} }
Assignment of initializer_list w to z:
w = { {4,4}, {5,5}, {6,6}, {7,7} }
z = { {7,7}, {6,6}, {5,5}, {4,4} }
π See also π
constructorβ constructs theunordered_map(public member function)
Obsessed with a classic constructor cameo.
π§ Category π§
- conditionally noexcept
Vibe check: conditionally noexcept. π
okay that's the whole page, bestie β source is http://cppreference.com, version/date is 2024.06.10, and the page is std::unorde...p::operator=(3). Go forth and assign, slay. π
β¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms