std::map::insert对 R 值有重载:
std::pair<iterator,bool> insert(value_type&&);
任何绑定到此重载的表达式都将调用 R 值构造函数。因为std::map<K,V>::value_typeis std::pair<const key_type, mapped_type>,并且std::pair有一个构造函数,它采用 R 值:
template<class U1, class U2>
pair(U1&& x, U2&& y);
那么只要您使用创建 R 值的表达式插入该对,就可以保证在创建对象和插入映射时都会调用key_type和的 R 值构造函数,例如:mapped_typepair
map1.insert(std::make_pair(0, Huge());
或者
map1.insert(std::make_pair(0, std::move(huge1));
当然,所有这一切都依赖于Huge有一个合适的 R 值构造函数:
Huge(Huge&& h)
{
...
}
std::map::emplace最后,如果您只是想Huge在地图中构造一个新对象作为元素
,您也可以使用。