std :: map emplace ohne Wert zu kopieren
The C ++ 11std::map<K,V>
type hat einemplace
funktioniert genauso wie viele andere Container.
std::map<int,std::string> m;
std::string val {"hello"};
m.emplace(1, val);
Dieser Code funktioniert wie angekündigt und ersetzt dasstd::pair<K,V>
direkt, es entsteht jedoch eine Kopie vonkey
undval
statt finden
Ist es möglich, den Werttyp auch direkt in die Karte einzufügen? Können wir es besser machen, als die Argumente im Aufruf von @ zu verschiebeemplace
?
Hier ist ein ausführlicheres Beispiel:
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