首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ -插入std::map直接没有赋值操作符

C++ -插入std::map直接没有赋值操作符
EN

Stack Overflow用户
提问于 2015-02-19 03:41:34
回答 1查看 1.1K关注 0票数 2

我有一个std::map,我想要插入一个对象,但我想避免不必要的拷贝,因为它是一个大对象,拷贝需要时间。我试过这个:

代码语言:javascript
运行
复制
MyPODType data(otherData);
data.modify();
myMap["Some key"] = data;

但是,这需要两个副本:一个复制otherData,另一个在赋值操作符中插入对象。因为它是POD,所以复制构造函数和赋值操作符都是默认的。

我怎么能只用一份拷贝就能做到这一点?我意识到一些编译器会优化第二个副本,但是我想以一种可移植的方式来实现。

EN

回答 1

Stack Overflow用户

发布于 2015-02-19 04:28:49

(我假设MyPODType是您map的确切value_type )

正如Igor在评论中指出的那样,由于C++11,您可以编写:

代码语言:javascript
运行
复制
myMap.emplace("Some key", otherData);

然后,您可以在映射中对值调用modify()

emplace函数将使用完美转发将参数分别转发给键和值的构造函数,而不必创建临时std::pair或默认构造值。

使用insert也是可能的

代码语言:javascript
运行
复制
std::pair<KeyType, MyPODType> p = { "Some key ", otherData };
p.second.modify();
myMap.insert( std::move(p) );

尽管emplace选项看起来更简单。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28598239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档