std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>::merge
De cppreference.com
< cpp | container | unordered multimap
template<class H2, class P2> void merge(std::unordered_map<Key, T, H2, P2, Allocator>& source ); | (1) | (desde C++17) |
template<class H2, class P2> void merge(std::unordered_map<Key, T, H2, P2, Allocator>&& source ); | (2) | (desde C++17) |
template<class H2, class P2> void merge(std::unordered_multimap<Key, T, H2, P2, Allocator>& source ); | (3) | (desde C++17) |
template<class H2, class P2> void merge(std::unordered_multimap<Key, T, H2, P2, Allocator>&& source ); | (4) | (desde C++17) |
Intenta extraer (splice) cada elemento en source
e insertarlo en *this usando la función resumen (hash) y el predicado de igualdad de clave de *this.
No se copia ni se mueve ningún elemento, solo se vuelven a apuntar los punteros internos de los nodos del contenedor. Todos los punteros y referencias a los elementos transferidos siguen siendo válidos, pero ahora se refieren a *this, no a source
. Los iteradores que hacen referencia a los elementos transferidos y todos los iteradores que hacen referencia a *this se invalidan.
El comportamiento no está definido si get_allocator()!= source.get_allocator().
Contenido |
[editar]Parámetros
source | - | Contenedor compatible del cual transferir los nodos. |
[editar]Valor de retorno
(Ninguno)
[editar]Complejidad
Caso promedio O(N), en el peor de los casos O(N*size()+N), donde N es source.size()
.
[editar]Ejemplo
Ejecuta este código
#include <iostream>#include <string>#include <utility>#include <unordered_map> // imprimir un std::pairtemplate<class Os, class U, class V> Os& operator<<(Os& os, conststd::pair<U,V>& p){return os <<'{'<< p.first<<", "<< p.second<<'}';} // imprimir un contenedor asociativotemplate<class Os, class K, class V> Os& operator<<(Os& os, conststd::unordered_multimap<K, V>& v){ os <<'['<< v.size()<<"] { ";bool o{};for(constauto& 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;}
Posible salida:
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] { }
[editar]Véase también
(C++17) | Extrae nodos del contenedor (función miembro pública) |
(C++11) | Inserta elementos o nodos(desde C++17) (función miembro pública) |