我是靠谱客的博主 魁梧唇彩,最近开发中收集的这篇文章主要介绍map的insert和emplace比较一、相同点二、不同点三、效率总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 一、相同点
  • 二、不同点
  • 三、效率
  • 总结

一、相同点

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比较一、相同点二、不同点三、效率总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部