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