# std::unordered_set<Key,Hash,KeyEqual,Allocator>::swap

From cppreference.com
< cpp‎ | container‎ | unordered set

void swap( unordered_set& other ); |  | (since C++11) (until C++17)
void swap( unordered_set& other ) noexcept(/* see below */); |  | (since C++17)

Exchanges the contents of the container with those of other. Does not invoke any move, copy, or swap operations on individual elements.

All iterators and references remain valid. The `end()` iterator is invalidated. The `Hash` and `KeyEqual` objects must be Swappable, and they are exchanged using unqualified calls to non-member `swap`.

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). | (since C++11)

### Parameters

other | - | container to exchange the contents with

### Exceptions

Any exception thrown by the swap of the `Hash` or `KeyEqual` objects. | (until C++17)
`noexcept` specification: noexcept( std::allocator_traits <Allocator>::is_always_equal::value && std::is_nothrow_swappable <Hash>::value && std::is_nothrow_swappable <key_equal>::value) | (since C++17)

### Complexity

Constant.

### Example

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) (C++11) | specializes the std::swap algorithm (function template)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/unordered_set/swap&oldid=121443"