c++ 首先使用std::map::find进行搜索,然后使用[]检索值,这通常是优化的吗?

q5lcpyga  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(127)

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

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;
   }

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

46qrfjad

46qrfjad1#

不,它不会被优化。模式级别太高。
你可以选择这样做:

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

   ...

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

您可以查看以下基准:

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

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

性能指标评测:https://quick-bench.com/q/7mFWe8jlXD7J9GTDMNSiZdcGCgY

相关问题