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().
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
(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) |