std :: map вставлять без копирования значения
C ++ 11std::map<K,V>
тип имеетemplace
функция, как и многие другие контейнеры.
std::map<int,std::string> m;
std::string val {"hello"};
m.emplace(1, val);
Этот код работает как рекламируется, используяstd::pair<K,V>
напрямую, однако это приводит к копииkey
а такжеval
происходит.
Можно ли включить тип значения непосредственно в карту? Можем ли мы сделать лучше, чем переместить аргументы в вызовеemplace
?
Вот более подробный пример:
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