【问题标题】:difference between map_instance[key] vs. map_instance.find(key) in c++c++ 中 map_instance[key] 与 map_instance.find(key) 之间的区别
【发布时间】:2017-10-02 11:01:43
【问题描述】:

我有一个定义为

的地图
static map<unsigned int, deque<FOO_STRUCT*> > CV_MAP; 

我想知道一种方法是否比另一种更好:

map_instance[key] vs. map_instance.find(key).

【问题讨论】:

  • 两者不等价。哪个更好,取决于您需要它的用途。
  • 我不敢问,但是你问之前有没有看过这些方法的描述?
  • 也许你需要a std::map reference
  • 是的,我一定误解了文档,对不起,我对 c++ 很陌生

标签: c++ c++11


【解决方案1】:

map_instance[key] 将默认为键 key 构造一个新值(如果它不存在)。

如,如果key不存在,它将调用deque&lt;FOO_STRUCT*&gt;的构造函数,并返回新构造的deque&lt;FOO_STRUCT*&gt;

使用find 成员函数不会为给定键构造新值——当键不存在时,它只会返回一个指向CV_MAP.end() 的迭代器。

使用适合您用例的内容。

【讨论】:

    【解决方案2】:

    map_instance[key] - 返回 reference(之前,如果需要,构造新元素) map_instance.find(key) - 返回 迭代器

    【讨论】:

      【解决方案3】:

      map_instance[key] 可能是首选,您只需将具有默认初始化的键(如果不存在)放入映射中,或者对其进行处理(如果存在)。

      考虑一种情况,您希望将每个元素的计数存储在数组中。

      for(auto x : array){
         map_instance[x]++;  //no need to find here at first. 
      }
      

      如您所见,它确实简化了您的代码,并摆脱了if-else 子句。

      for(auto x : array){
         if ( map_instance.find(key) == map_instance.end() ) {
            map_instance[x] = 0;
         }
         else{
            map_instance[x]++;
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-03-09
        • 1970-01-01
        • 2015-08-12
        • 2011-04-20
        • 2013-09-22
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        相关资源
        最近更新 更多