我经常在我使用的一些代码库中发现这种模式:
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)
但我想知道,在实践中,第一个版本是否会被优化以不搜索两次?
不,它不会被优化。格局太高级了。
你可以优先这样做:
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