Der C++ 11 std::map<K,V>
Typ hat eine emplace
Funktion, wie viele andere Container.Std :: Karte Platzieren ohne Kopieren Wert
std::map<int,std::string> m;
std::string val {"hello"};
m.emplace(1, val);
Dieser Code funktioniert wie beworben, direkt die std::pair<K,V>
emplacing, jedoch ergibt sich eine Kopie von key
und val
stattfindet.
Kann der Wertetyp auch direkt in die Karte eingefügt werden? Können wir es besser machen, als die Argumente im Aufruf an emplace
zu verschieben?
Hier ist ein gründlicheres 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
@ Cheersandthth.-Alf, ich habe eine Reihe von Dokumenten gelesen und komme zu dem Schluss, dass es nicht möglich ist. Allerdings bin ich nicht der erfahrenste C++ - Entwickler, also wollte ich ihn an einigen der Gurus vorbeiführen, in der Hoffnung, dass ich falsch liege. Kannst du helfen? –
okay, lesen Sie http://en.cppreference.com/w/cpp/container/map/emplace –
Meinst du eine * extra * Kopie? "val" ist ein Lvalue, also muss irgendwann eine Kopie erstellt werden. – juanchopanza