繁体   English   中英

C ++-直接插入std :: map中,无需赋值运算符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM