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

Respuestas a la pregunta(2)

Su respuesta a la pregunta