std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>::merge
Von cppreference.com
< cpp | container | unordered multimap
| template< class H2, class P2 > void merge( std::unordered_map<Key, T, H2, P2, Allocator>& source ); |
(1) | (seit C++17) |
| template< class H2, class P2 > void merge( std::unordered_map<Key, T, H2, P2, Allocator>&& source ); |
(2) | (seit C++17) |
| template< class H2, class P2 > void merge( std::unordered_multimap<Key, T, H2, P2, Allocator>& source ); |
(3) | (seit C++17) |
| template< class H2, class P2 > void merge( std::unordered_multimap<Key, T, H2, P2, Allocator>&& source ); |
(4) | (seit C++17) |
Versucht, jedes Element in source zu extrahieren ("splicen") und in *this einzufügen, wobei die Hash-Funktion und der Schlüsselgleichheitsprädikat von *this verwendet werden.
Es werden keine Elemente kopiert oder verschoben, sondern nur die internen Zeiger der Containerknoten werden neu gerichtet. Alle Zeiger und Referenzen auf die übertragenen Elemente bleiben gültig, verweisen aber nun auf *this und nicht auf source. Iteratoren, die auf die übertragenen Elemente verweisen, sowie alle Iteratoren, die auf *this verweisen, werden ungültig.
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)
[bearbeiten] Komplexität
Durchschnittlicher Fall O(N), schlimmster Fall O(N * size() + N), wobei N source.size() ist.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <iostream> #include <string> #include <unordered_map> #include <utility> // 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 an associative container template<class Os, class K, class V> Os& operator<<(Os& os, const std::unordered_multimap<K, V>& v) { os << '[' << v.size() << "] {"; bool o{}; for (const auto& e : v) os << (o ? ", " : (o = 1, "")) << e; return os << "}\n"; } int main() { std::unordered_multimap<std::string, int> p{{"C", 3}, {"B", 2}, {"A", 1}, {"A", 0}}, q{{"E", 6}, {"E", 7}, {"D", 5}, {"A", 4}}; std::cout << "p: " << p << "q: " << q; p.merge(q); std::cout << "p.merge(q);\n" << "p: " << p << "q: " << q; }
Mögliche Ausgabe
p: [4] {{A, 1}, {A, 0}, {B, 2}, {C, 3}}
q: [4] {{A, 4}, {D, 5}, {E, 6}, {E, 7}}
p.merge(q);
p: [8] {{E, 6}, {E, 7}, {C, 3}, {A, 1}, {A, 0}, {A, 4}, {D, 5}, {B, 2}}
q: [0] {}[bearbeiten] Siehe auch
| (C++17) |
extrahiert Knoten aus dem Container (public member function) |
| fügt Elemente ein oder Knoten(seit C++17) (public member function) |