有一个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[]。

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

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

    有一个widget类如下: class Widget { public:Widget();Widget(double weight);Widget& operator = (double we ...

  2. C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)

    1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...

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

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

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

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

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

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

  6. 22点到凌晨5点是几个小时_寅时是几点到几点:3点-5点(24小时凌晨3时~凌晨5时)...

    寅时是几点到几点:3点-5点(24小时凌晨3时-凌晨5时) [寅时]平旦,又称黎明.早晨.日旦等:时是夜与日的交替之际.(上午3时正至上午5时正).老虎在此时最猛. 寅时出生的人命运(03时至05时) ...

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

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

  8. 22点到凌晨5点是几个小时_22点到凌晨5点是几个小时_寅时是几点到几点:3点-5点(24小时凌晨3时~凌晨5时)......

    寅时是几点到几点:3点-5点(24小时凌晨3时-凌晨5时) [寅时]平旦,又称黎明.早晨.日旦等:时是夜与日的交替之际.(上午3时正至上午5时正).老虎在此时最猛. 寅时出生的人命运(03时至05时) ...

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

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

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

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

最新文章

  1. linux怎么添加ubuntu源,ubuntu/linuxmint如何添加和删除PPA源
  2. [Android Training视频系列]2.2 Pausing and Resuming an Activity
  3. javax.naming.NoInitialContextException: Need to specify class name in environment or system property
  4. 一款超级简单的瀑布流的制作
  5. Qt的index 用方法static_castCTableItem*(index.internalPointer())取出来的值的成员都未初始化...
  6. 昇思MindSpore年终盘点 | 看完这篇正式开启虎年!
  7. Spark SQL之DataFrame概述
  8. Kubernetes系列之Helm介绍篇
  9. iOS 本地通知 操作
  10. 一起学设计模式 - 桥接模式
  11. CYQ.Data 轻量数据层之路 使用篇-MAction 数据查询 视频 D (二十一)
  12. MySQL用户管理和权限设置
  13. 视频全程:哈萨比斯首次公开解读AlphaZero
  14. 派生类的构造复制与析构
  15. android支付后声音,支付宝到账声音生成器
  16. Win10 C盘修改用户文件夹
  17. 智慧高铁、智慧机场对护照阅读器的应用 SDK说明
  18. 4399 html5游戏平台,h5mini-2.0-sample
  19. vant 验证手机号_Vue 正则表达式验证邮箱和手机号码
  20. python----小计买书问题

热门文章

  1. process_创建进程
  2. DeepMind新建虚拟认识实验室,像研究人类一样研究AI(代码开源)
  3. #20165201 macOS中统计代码总行数
  4. 带你看JDK源码之HashMap
  5. apache实现手机访问www网站自动跳转到WAP站点
  6. Powershell中禁止执行脚本解决办法
  7. excel实时获取基金信息的实现方法
  8. 62. WWW 服务器
  9. 28.ldconfig
  10. 5. Web 的结构组件