Namensräume
Varianten
Aktionen

std::set<Key,Compare,Allocator>::merge

Von cppreference.com
< cpp‎ | container‎ | set
 
 
 
 
template< class C2 >
void merge( std::set<Key, C2, Allocator>& source );
(1) (seit C++17)
template< class C2 >
void merge( std::set<Key, C2, Allocator>&& source );
(2) (seit C++17)
template< class C2 >
void merge( std::multiset<Key, C2, Allocator>& source );
(3) (seit C++17)
template< class C2 >
void merge( std::multiset<Key, C2, Allocator>&& source );
(4) (seit C++17)

Versucht, jedes Element aus source zu extrahieren ("splicen") und in *this einzufügen, wobei das Vergleichsobjekt von *this verwendet wird. Wenn es ein Element in *this gibt, dessen Schlüssel mit dem Schlüssel eines Elements aus source äquivalent ist, dann wird dieses Element nicht aus source extrahiert. Keine Elemente werden kopiert oder verschoben, nur die internen Zeiger der Container-Knoten werden umgeleitet. Alle Zeiger und Referenzen auf die übertragenen Elemente bleiben gültig, verweisen aber nun auf *this und nicht auf source.

Das Verhalten ist undefiniert, wenn get_allocator() != source.get_allocator().

Inhalt

[bearbeiten] Parameter

source - kompatibler Container, von dem die Knoten übertragen werden sollen

[bearbeiten] Rückgabewert

(keine)

Ausnahmen

Wirft keine Ausnahmen, es sei denn, der Vergleich wirft Ausnahmen.

[bearbeiten] Komplexität

N * log(size() + N)), wobei N = source.size().

[bearbeiten] Beispiel

#include <iostream>
#include <set>
 
// print out a container
template<class Os, class K>
Os& operator<<(Os& os, const std::set<K>& v)
{
    os << '[' << v.size() << "] {";
    bool o{};
    for (const auto& e : v)
        os << (o ? ", " : (o = 1, " ")) << e;
    return os << " }\n";
}
 
int main()
{
    std::set<char>
        p{'C', 'B', 'B', 'A'}, 
        q{'E', 'D', 'E', 'C'};
 
    std::cout << "p: " << p << "q: " << q;
 
    p.merge(q);
 
    std::cout << "p.merge(q);\n" << "p: " << p << "q: " << q;
}

Ausgabe

p: [3] { A, B, C }
q: [3] { C, D, E }
p.merge(q);
p: [5] { A, B, C, D, E }
q: [1] { C }

[bearbeiten] Siehe auch

(C++17)
extrahiert Knoten aus dem Container
(public member function) [edit]
fügt Elemente ein oder Knoten(seit C++17)
(public member function) [edit]