• STL map的几种赋值方式


    map的几种赋值方法比较

    学习或者工作中经常会用到map,赋值是常用的操作,map有好几种赋值方法,哪一种方式最有效?网上了解了一些资料,在这里总结一下。

    常用的赋值方式有如下几种。

       // 1) Assignment using array index notation
       Foo["Bar"] = 12345;
    
       // 2) Assignment using member function insert() and STL pair
       Foo.insert(std::pair("Bar", 12345));
    
       // 3) Assignment using member function insert() and "value_type()"
       Foo.insert(map::value_type("Bar", 12345));
    
       // 4) Assignment using member function insert() and "make_pair()"
       Foo.insert(std::make_pair("Bar", 12345));
        
       // 5)C++ 11
       Foo.emplace("Bar", 12345);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    一、[] 与 insert这两种方式存在语义差异

    • []替换旧值(如果有)
    • insert忽略新值(如果已经存在旧值)

    二、几种 insert 方式的比较

    •   std::map::value_type ?和?std::pair之间没有重要的差别
      
        std::make_pair("Bar", 12345) 相比 std::pair("Bar", 12345)开销更少
      
      • 1
      • 2
      • 3

    一般来说,[] 用于更新,insert会忽略重复项。std::make_pair遵循DRY准则,不会重复自身。

    启用C++ 11的情况下,推荐使用emplace,最简单也是最效的方式。(它的行为是insert,但是它构造了新的元素)

    学习STL的时候,看到前辈表达了STL的爱情观hh,分享一下。

    前段日子读了STL的源码,大师级的作品真是精致到让人喟叹。当然,有时候你在网上还是可以看到很多对STL的批评,例如,对编译器要求很高,很多时候出错了的话,打印出来的错误信息总是让人摸不着头脑的。这确实是比较头疼的一个问题,因为模板编程,编译的过程总是分为两个部分的,是先要找到相应的模板,然后才对模板进行具现化,有时候单纯从模板来看,似乎很完整,没有什么问题呀,可是一旦投入使用了,才发现找不到合适的具现化版本,于是又要搞特化了。某日在路上行走,突然想起爱情这个难题,突然想起具现化,

    突然觉得爱情就像是一个模板类,是想象,没有实现的时候,它看起来很完美,很丰富,可是爱情一旦具现化,它便成了独此一家的一个类,想象的空间本就狭窄了,倘若需求比较复杂,还须得有偏特化版本,不然就要出错。每个女人心目中的恋爱对象都是完美的,是那种选择性的完美,她爱的并不是那个实体,而是加诸于该实体上的想象。

  • 相关阅读:
    day18 java ​​​​​​​集合Collection的List和Set
    开发小程序插件如何实现盈利?
    Android实现两台手机屏幕共享和远程控制
    [附源码]计算机毕业设计JAVA疫情状况下生活物资集体团购系统
    node.js的安装和使用(保姆教程)
    处理查询结果集
    2093409-57-3,DBCO-PEG3-amine,DBCO-PEG3-NH2,二苯并环辛炔-三聚乙二醇-氨基供应
    小程序 表单当用户修改字段,点击返回检测用户是否有修改
    TiDB Lightning 前置检查
    沪漂十余年我拿到了上海户口
  • 原文地址:https://blog.csdn.net/Bejpse/article/details/126516652