【问题标题】:Is searching first with std::map::find then using [], to retrieve the value, optimised usually?是先用 std::map::find 搜索然后用 [] 检索值,通常是优化的吗?
【发布时间】:2023-01-21 03:29:59
【问题描述】:

我经常在我使用的一些代码库中发现这种模式:

   std::map<std::string, std::string> mymap;

   ...

   if (mymap.find(key) != mymap.end())
   {
       return mymap[key];
   }

我知道这可以替换为

   std::map<std::string, std::string> mymap;

   ...

   auto it = mymap.find(key) 
   if (it != mymap.end())
   {
       return it->second;
   }

但我想知道,在实践中,第一个版本是否会得到优化而不是搜索两次?

【问题讨论】:

    标签: c++


    【解决方案1】:

    不,它不会被优化。模式级别太高。

    您可以优先这样做:

     std::map<std::string, std::string> mymap;
    
       ...
    
       auto it = mymap.find(key);
       if ( it != mymap.end())
       {
           return it->second;
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多