std :: map substitua sem copiar valor

O C ++ 11std::map<K,V>&nbsp;tipo tem umemplace&nbsp;função, assim como muitos outros contêineres.

std::map<int,std::string> m;

std::string val {"hello"};

m.emplace(1, val);

Esse código funciona como anunciado, substituindo ostd::pair<K,V>&nbsp;diretamente, no entanto, resulta em uma cópia dokey&nbsp;eval&nbsp;tomando lugar.

É possível substituir o tipo de valor diretamente no mapa também? Podemos fazer melhor do que mover os argumentos na chamada paraemplace?

Aqui está um exemplo mais 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