有一个widget类如下:

class Widget
{
public:Widget();Widget(double weight);Widget& operator = (double weight);
}

使用如下:

std::map<int, Widget> datas; // 语句1
datas[1] = 1.50; // 语句2

调用语句2之前,datas为空。
因此,语句2等同于先默认构造一对象,然后再对其进行赋值。

auto iter = datas.insert({1, Widge()});
*(iter->second) = widget(1.50);

效率更高的做法是:直接使用1.50作为参数,在datas中进行构造。

datas.insert({1, widget(1.50)});

这样,一次构造函数调用代替了一次默认构造函数调用+1次拷贝赋值调用。

operator[]的设计目的是为了提供“添加和更新”的功能,当作为“添加”操作时,insert比operator[]效率更高。当作更新操作时,即当一个等价的键已经在map中时,却恰好相反。

datas[k] = v; // 使用operator [] 把k的值更新为vtypdef std::map<int, Widget> IntWidgetMap;
datas.insert(IntWidgetMap::value_type(k, v)).first->second = v; // 使用insert把k的值更新为v

非常明显,在更新数据时使用operator[]更加方便。

对效率的考虑使我们得出结论:当先map中添加元素时,要优先选用insert,而不是operator[]。
而从效率和美学的观点考虑,结论是:当更新已经在map中的元素的值时,要优先选择operator[]。

12.当效率至关重要时,请在map::operator[]与map::insert之间谨慎作出选择相关推荐

  1. 计算机网络题目:一个网络的IP地址为193.12.5.0/24。请写出这个网络的直接广播地址、受限广拍地址与这个网络上的特定主机地址,回送地址

    题目: 一个网络的IP地址为193.12.5.0/24.请写出这个网络的直接广播地址.受限广拍地址与这个网络上的特定主机地址,回送地址 直接广播地址:192.12.5.255 受限广播地址:255.2 ...

  2. 离开时请告诉自己生意就是生意

    离开时请告诉自己生意就是生意 离职或者被离职,是职场中很常见的事情,每天这个星球上不知道要发生多少次,不管你经历过与否.体会到其中的滋味与否,他都会一直存在着!当这一切发生时,不管你是获利者还是受害者 ...

  3. 当您给别人身份证复印件时请你注意!

    当您给别人身份证复印件时请你注意! 小心身份证复印件的使用,保护好自己,小忽视酿大货. 下面的事情一定要提起注意.我一个朋友老公是警察,也听他说过,他们接到1女士报案,说是别墅被卖掉了.后来一查发现, ...

  4. Epic games 一直卡在 在我们启动更新时请稍后的解决方法

    以前安装了UE4以后,卸载了重新安装UE5,使用Epic games安装UE5过程中出现"在我们启动更新时请稍后",一直卡在这个界面,某度.某狗都搜了个遍还是没有解决,什么开加速器 ...

  5. JavaScript里面实现12小时制的时分秒转化成24小时制的时分秒

    首先,通过JavaScript的Date对象可以很方便的获取12小时制的 时 分 秒: axisData = (new Date()).toLocaleTimeString().replace(/^\ ...

  6. EPIC客户端 “在我们启动更新时请稍后”解决办法

    EPIC客户端 "在我们启动更新时请稍后"解决办法 已经尝试的方法:使用各种 加速器 标题解决问题的方法: 实例:

  7. 研究交流群:10465389,讨论c++嵌入式方面的,最好是研究生和程序热爱者,申请加入时请注明就读学校名称。

    研究交流群:10465389,讨论c++嵌入式方面的,最好是研究生和程序热爱者,申请加入时请注明就读学校名称.

  8. 程序员编程思想之数学素养(转载时请注明出处)

    数值分析中的哲学思想 转载时请注明出处:http://blog.csdn.net/makeyourchance/article/details/3812197 高等数学中我们遇到的问题 (1)遇到超越 ...

  9. 打开 McAfee VirusScan v8.5i 的“访问保护”时请慎重

    打开 McAfee VirusScan v8.5i 的"访问保护"时请慎重 今天,刚刚给新买的笔记本装了XP的SP3系统,然后设置了一个静态IP,很舒服的上着网. 但是,下午却发现 ...

最新文章

  1. 张一鸣:10年面试2000人,我发现混得好的人,全都有同一个特质
  2. 关系代数——附加的关系运算(1)
  3. 学习笔记之卸载远程目标进程中的DLL模块(转)
  4. mse均方误差计算公式_PCA的两种解读:方差最大与均方误差最小的推导
  5. python38使用_笨方法学Python 习题38:列表的操作
  6. java1234 webservice 第4 课 拦截器
  7. 开源监控——cacti
  8. Python 调用JSON接口实例
  9. 谷歌金山词霸合作版在PDF中不能取词
  10. Android 10.0 飞行模式下禁用NFC功能
  11. 机电一体化c语言程序设计,高职机电一体化C语言程序设计研究
  12. MySQL基本优化方案
  13. 堆排序-以小根堆为例
  14. xp如何开启远程服务器,XP系统打开远程桌面与修改3389端口的操作步骤
  15. html怎样把字幕贴着色块走,手把手教你用HTML做音画贴
  16. 人工智能之深度学习常见应用方向你都了解吗?(文末包邮送书5本)
  17. 2016年1月19日课程作业
  18. 自己写的听力训练软件+背单词
  19. mac下脚本自动安装brew
  20. 组织敏捷转型中的 HR

热门文章

  1. requsets模块和beautifulsoup模块
  2. How to create a jump server in AWS VPC
  3. 026-微软Ajax异步组件
  4. 位向量 补码与无符号 加法与乘法 CSAPP学习笔记
  5. C# 委托(Delegate) 事件(Event)应用详解
  6. [Android] AlertDialog获取网上天气并显示各城市天气
  7. C# 连接SQLServer数据库及登录验证知识
  8. iOS实现“下雨下雪”动画效果和“烟花”动画效果
  9. LeetCode Algorithm 704. 二分查找
  10. 1.Vue 安装与简单使用