std :: map substitua sem copiar valor
O C ++ 11std::map<K,V>
tipo tem umemplace
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>
diretamente, no entanto, resulta em uma cópia dokey
eval
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