std :: mapa emplace sin copiar valor
El C ++ 11std::map<K,V>
tipo tiene unemplace
función, al igual que muchos otros contenedores.
std::map<int,std::string> m;
std::string val {"hello"};
m.emplace(1, val);
Este código funciona como se anuncia, ubicando elstd::pair<K,V>
directamente, sin embargo resulta en una copia dekey
yval
teniendo lugar.
¿Es posible colocar el tipo de valor directamente en el mapa también? ¿Podemos hacerlo mejor que mover los argumentos en la llamada aemplace
?
Aquí hay un ejemplo más completo:
struct Foo
{
Foo(double d, string s) {}
Foo(const Foo&) = delete;
Foo(Foo&&) = delete;
}
map<int,Foo> m;
m.emplace(1, 2.3, string("hello")); // invalid