Espacios de nombres
Variantes
Acciones

std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>::emplace

De cppreference.com
 
 
 
 
template< class... Args >
iterator emplace( Args&&... args );
(desde C++11)

Inserta (emplaza) un nuevo elemento en el contenedor construido en el sitio con los argumentos dados args .

El uso cuidadoso de emplace permite construir el nuevo elemento evitando operaciones innecesarias de copia o movimiento. El constructor del nuevo elemento (es decir, std::pair<const Key, T>) se llama con exactamente los mismos argumentos que se le suplementaron a emplace, reenviados mediante std::forward<Args>(args)....


Si ocurre una redispersión (rehashing) debido a la inserción, se invalidan todos los iteradores. De lo contrario, no se afectan los iteradores. Las referencias no se invalidan. La dispersión vuelve a ocurrir solo si el nuevo número de elementos es mayor que max_load_factor()*bucket_count().

Contenido

[editar] Parámetros

args - Los argumentos a reenviar al constructor del elemento.

[editar] Valor de retorno

Devuelve un iterador al elemento insertado.

[editar] Excepciones

Si se lanza una excepción por cualquier operación, esta función no surte efecto.

[editar] Complejidad

Constante amortizada en promedio, en el peor de los casos lineal en el tamaño del contenedor.

[editar] Ejemplo

#include <iostream>
#include <utility>
#include <string>
#include <unordered_map>
 
int main()
{
    std::unordered_multimap<std::string, std::string> m;
 
    // usa el constructor de movimiento de pair
    m.emplace(std::make_pair(std::string("a"), std::string("a")));
 
    // usa el constructor de conversión de movimiento de pair
    m.emplace(std::make_pair("b", "abcd"));
 
    // usa el constructor de plantilla de pair
    m.emplace("d", "ddd");
 
    // usa el constructor de pieza por pieza de pair
    m.emplace(std::piecewise_construct,
              std::forward_as_tuple("c"),
              std::forward_as_tuple(10, 'c'));
 
 
    for (const auto &p : m) {
        std::cout << p.first << " => " << p.second << '\n';
    }
}

Posible salida:

a => a
b => abcd
c => cccccccccc
d => ddd

[editar] Véase también

Construye elementos en el sitio utilizando una pista.
(función miembro pública) [editar]
(C++11)
Inserta elementos o nodos (desde C++17)
(función miembro pública) [editar]