[英]C++ - insert into std::map directly without assignment operator
我有一个std::map
,我想将一个对象插入其中,但是我想避免不必要的复制,因为它是一个大对象,复制需要时间。 我尝试了这个:
MyPODType data(otherData);
data.modify();
myMap["Some key"] = data;
但是,这需要2个副本:一个要复制otherData
,另一个要在赋值运算符中插入对象。 由于是POD,因此复制构造函数和赋值运算符均为默认值。
我该如何只复制一份? 我意识到有些编译器会优化第二个副本,但是我想以一种可移植的方式来实现。
(我假设MyPODType
是您的map
的确切value_type
)
正如Igor Tandetnik在评论中指出的那样,由于C ++ 11,您可以编写:
myMap.emplace("Some key", otherData);
然后您可以在地图中的值上调用modify()
。
emplace
函数将使用完美的转发将您的参数分别转发到键和值的构造函数,而不必创建临时的std::pair
或default-construct一个值。
也可以使用insert
:
std::pair<KeyType, MyPODType> p = { "Some key ", otherData };
p.second.modify();
myMap.insert( std::move(p) );
尽管emplace
选项似乎更简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.