Namensräume
Varianten
Aktionen

std::multimap<Key,T,Compare,Allocator>::swap

Von cppreference.com
< cpp‎ | container‎ | multimap
 
 
 
 
void swap( multimap& other );
(bis C++17)
void swap( multimap& other ) noexcept(/* siehe unten */);
(seit C++17)

Tauscht den Inhalt des Containers mit dem von other aus. Ruft keine Bewegungs-, Kopier- oder Tauschoperationen für einzelne Elemente auf.

Alle Iteratoren und Referenzen bleiben gültig. Der end() Iterator wird ungültig. Die Compare Objekte müssen Swappable sein und werden durch einen nicht qualifizierten Aufruf von non-member swap ausgetauscht.

Wenn std::allocator_traits<allocator_type>::propagate_on_container_swap::value true ist, werden die Allocatoren durch einen nicht qualifizierten Aufruf von non-member swap ausgetauscht. Andernfalls werden sie nicht ausgetauscht (und wenn get_allocator() != other.get_allocator(), ist das Verhalten undefiniert).

(seit C++11)

Inhalt

[bearbeiten] Parameter

Sonstiges - Container, mit dem die Inhalte ausgetauscht werden sollen

[bearbeiten] Ausnahmen

Jede Ausnahme, die vom Austausch der Compare-Objekte ausgelöst wird.

(bis C++17)
noexcept-Spezifikation:  
noexcept(std::allocator_traits<Allocator>::is_always_equal::value
&& std::is_nothrow_swappable<Compare>::value)
(seit C++17)

[bearbeiten] Komplexität

Konstant.

[bearbeiten] Beispiel

#include <iostream>
#include <string>
#include <utility>
#include <map>
 
// print out a std::pair
template<class Os, class U, class V>
Os& operator<<(Os& os, const std::pair<U, V>& p)
{
    return os << p.first << ':' << p.second;
}
 
// print out a container
template<class Os, class Co>
Os& operator<<(Os& os, const Co& co)
{
    os << '{';
    for (auto const& i : co)
        os << ' ' << i;
    return os << " }\n";
}
 
int main()
{
    std::multimap<std::string, std::string>
        m1{{"γ", "gamma"}, {"β", "beta"}, {"α", "alpha"}, {"γ", "gamma"}},
        m2{{"ε", "epsilon"}, {"δ", "delta"}, {"ε", "epsilon"}};
 
    const auto& ref = *(m1.begin());
    const auto iter = std::next(m1.cbegin());
 
    std::cout << "──────── before swap ────────\n"
              << "m1: " << m1 << "m2: " << m2 << "ref: " << ref
              << "\niter: " << *iter << '\n';
 
    m1.swap(m2);
 
    std::cout << "──────── after swap ────────\n"
              << "m1: " << m1 << "m2: " << m2 << "ref: " << ref
              << "\niter: " << *iter << '\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.
}

Ausgabe

──────── before swap ────────
m1: { α:alpha β:beta γ:gamma γ:gamma }
m2: { δ:delta ε:epsilon ε:epsilon }
ref: α:alpha
iter: β:beta
──────── after swap ────────
m1: { δ:delta ε:epsilon ε:epsilon }
m2: { α:alpha β:beta γ:gamma γ:gamma }
ref: α:alpha
iter: β:beta

[bearbeiten] Siehe auch

spezialisiert den Algorithmus std::swap
(function template) [edit]