Namespaces
Variants

std::unordered_multiset<Key,Hash,KeyEqual,Allocator>:: swap

From cppreference.net

void swap ( unordered_multiset & other ) ;
(desde C++11)
(hasta C++17)
void swap ( unordered_multiset & other ) noexcept ( /* ver más abajo */ ) ;
(desde C++17)
(constexpr desde C++26)

Intercambia el contenido del contenedor con el de other . No invoca ninguna operación de movimiento, copia o intercambio en elementos individuales.

Todos los iteradores y referencias permanecen válidos. El iterador end() queda invalidado. Hash y KeyEqual deben ser Swappable , y los objetos de estos tipos se intercambian usando llamadas no calificadas a swap no miembro. Si std:: allocator_traits < allocator_type > :: propagate_on_container_swap :: value es true , entonces los asignadores de memoria se intercambian usando una llamada no calificada a swap no miembro. De lo contrario, no se intercambian (y si get_allocator ( ) ! = other. get_allocator ( ) , el comportamiento es indefinido).

Contenidos

Parámetros

otro - contenedor con el que intercambiar los contenidos

Excepciones

Cualquier excepción lanzada por el intercambio de los objetos Hash o KeyEqual .

(hasta C++17)
noexcept especificación:
noexcept ( std:: allocator_traits < Allocator > :: is_always_equal :: value

&& std:: is_nothrow_swappable < Hash > :: value

&& std:: is_nothrow_swappable < key_equal > :: value )
(desde C++17)

Complejidad

Constante.

Ejemplo

#include <iostream>
#include <unordered_set>
template<class Os, class Co> Os& operator<<(Os& os, const Co& co)
{
    os << '{';
    for (const auto& i : co)
        os << ' ' << i;
    return os << " } ";
}
int main()
{
    std::unordered_multiset<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';
    // Nótese que cada iterador que se refiere a un elemento en un contenedor antes del intercambio
    // se refiere al mismo elemento en el otro contenedor después del intercambio. Lo mismo es válido
    // para las referencias.
}

Salida posible:

{ 2 3 3 1 } { 4 5 5 } 3 5 2 4
{ 4 5 5 } { 2 3 3 1 } 3 5 2 4

Véase también

especializa el algoritmo std::swap
(plantilla de función)