概述
文章目录
- 一、相同点
- 二、不同点
- 三、效率
- 总结
一、相同点
emplace是C++11新标准引入了新成员,同时引入的 还有emplace_front、emplace_back。分别对应容器的原有操作insert、push_front、push_back。
其功能分别为:将元素插入到一个指定的位置、将元素插入到容器头部、将元素插入到容器尾部。
二、不同点
- 调用push或者insert时,将元素类型的对象传递出去,这些对象被拷贝到容器当中,或者创建一个局部临时对象,并将其压入容器
- 调用emplace时,则是将参数传递给元素类型的构造函数,emplace成员使用这些参数在容器管理的内存空间中直接构造元素,没有拷贝操作
三、效率
- 在大部分情况下,emplace函数可以在集合内直接创建新元素,而不需要将现有元素复制或移动到集合内,使用emplace函数能够减少复制或移动构造函数的开销,能提供比insert、push等函数更高的性能
- 但对于std::map和std::unordered_map而言,在某些情况下insert可能比emplace更快
例如:
调用std::map<TKey, TValue>::insert函数需要传入一个std::pair<TKey,TValue>对象。在实际插入时,这个pair会用于复制构造或移动构造map中实际的存储对象,这样会产生一次复制操作。调用std::map<TKey,TValue>::emplace函数时,则会使用传入的参数直接在实际的存储位置原地构造一个std::pair<TKey, TValue>,这样通常可以减少一次复制操作
但是,若key原本就已经存在,则insert只需完成键的对比就可以直接返回了,而emplace将必须原地构造一个新的对象才能开始对比,使用emplace将需要额外的构造开销。
总结
大部分情况下,insert的效率不如emplace,但若key已存在情况下,insert效率优于emplace
最后
以上就是魁梧唇彩为你收集整理的map的insert和emplace比较一、相同点二、不同点三、效率总结的全部内容,希望文章能够帮你解决map的insert和emplace比较一、相同点二、不同点三、效率总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复