std::unordered_set::swap(3)
okay so bestie, welcome to std::unordered_set::swap(3) from the C++ Standard Libary β manual name folded in right here so we donβt copy that header line, periodt. This is the page for swapping two unordered_setsβ whole contents, and itβs giving container-level main character energy. π
β¨
π NAME π
std::unordered_set::swap β literally std::unordered_set::swap. Thatβs the name, bestie. No surprises, just vibes. π
πΈ Synopsis πΈ
Two synopsis eras, no cap:
void swap( unordered_set& other ); (since C++11)
(until C++17)
void swap( unordered_set& other ) noexcept(/* see below */); (since C++17)
What it does: exchanges the contents of the container with those of other. It does not invoke any move, copy, or swap operations on individual elements. Like, itβs not touching the elements one by one; the containers are just swapping their whole setup. π
Iterator/reference tea: all iterators and references remain valid. The end() iterator is invalidated. So your iterators keep pointing at the same elements after the swap β but end() said bye. π
Hash and KeyEqual tea: the Hash and KeyEqual objects must be Swappable, and they are exchanged using unqualified calls to non-member swap. Thatβs the exact wording, bestie.
Allocator tea (since C++11): if std::allocator_traits<allocator_type>::propagate_on_container_swap::value is true, then the allocators are exchanged using an unqualified call to non-member swap. Otherwise, they are not swapped β and if get_allocator() != other.get_allocator(), the behavior is undefined.
β οΈ That undefined behavior is not a vibe. Do not collect $200. Do not pass go. π
π Parameters π
otherβ container to exchange the contents with
π«Ά Return value π«Ά
(none) β no return value, we love a clean exit. β¨
π Exceptions π
- Until C++17: any exception thrown by the swap of the
HashorKeyEqualobjects. Thatβs it. - Since C++17, the
noexceptspecification is literally:
noexcept(std::allocator_traits<Allocator>::is_always_equal::value
&& std::is_nothrow_swappable<Hash>::value
&& std::is_nothrow_swappable<key_equal>::value)
π₯ Complexity π₯
Constant. Yes bestie, constant time β iconic behavior. π
π Example π
Hereβs the code, with the // Run this code marker and everything:
// Run this code
#include <iostream>
#include <unordered_set>
template<class Os, class Co> Os& operator<<(Os& os, const Co& co)
{
os << '{';
for (auto const& i : co)
os << ' ' << i;
return os << " } ";
}
int main()
{
std::unordered_set<int> a1{3, 1, 3, 2}, a2{5, 4, 5};
auto it1 = std::next(a1.begin());
auto it2 = std::next(a2.begin());
const int& ref1 = *(a1.begin());
const int& ref2 = *(a2.begin());
std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' '
<< ref2 << '\n';
a1.swap(a2);
std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' '
<< ref2 << '\n';
// Note that every iterator referring to an element in one container before the swap
// refers to the same element in the other container after the swap. Same is true
// for references.
}
π Possible output: π
{ 2 1 3 } { 4 5 } 1 5 2 4
{ 4 5 } { 2 1 3 } 1 5 2 4
π See also π
std::swap(std::unordered_set)β specializes thestd::swapalgorithm (C++11) (function template)
π Category: π
- conditionally noexcept
and thatβs the cute sign-off: source/version is http://cppreference.com, date 2024.06.10, page std::unordered_set::swap(3). mwah ππ«Ά
π¦ 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