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

Blu*_*rin 3 c++ search stdmap

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

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

   ...

   if (mymap.find(key) != mymap.end())
   {
       return mymap[key];
   }
Run Code Online (Sandbox Code Playgroud)

我知道这可以替换为

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

   ...

   auto it = mymap.find(key) 
   if (it != mymap.end())
   {
       return it->second;
   }
Run Code Online (Sandbox Code Playgroud)

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

Hen*_*her 5

不,它不会被优化。格局太高级了。

你可以优先这样做:

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

   ...

   auto it = mymap.find(key);
   if ( it != mymap.end())
   {
       return it->second;
   }
Run Code Online (Sandbox Code Playgroud)

您可以检查以下基准:

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

   ...

   auto it = mymap.find(key);
   if ( it != mymap.end())
   {
       return it->second;
   }
Run Code Online (Sandbox Code Playgroud)

基准测试:https://quick-bench.com/q/7mFWe8jlXD7J9GTDMNSiZdcGCgY

在此输入图像描述

  • @NathanOliver,答案在其初始版本之后扩展了很多,该版本相当简单 (2认同)
  • 感谢您的快速工作台链接,我不知道这个网站:它非常漂亮 (2认同)