std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>::emplace
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().
Parámetros
| args | - | Los argumentos a reenviar al constructor del elemento. |
Valor de retorno
Devuelve un iterador al elemento insertado.
Excepciones
Si se lanza una excepción por cualquier operación, esta función no surte efecto.
Complejidad
Constante amortizada en promedio, en el peor de los casos lineal en el tamaño del contenedor.
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
Véase también
(C++11) |
Construye elementos en el sitio utilizando una pista. (función miembro pública) |
(C++11) |
Inserta elementos o nodos (desde C++17) (función miembro pública) |