void func1(const std::map<int, int>& mp) {
auto it = std::find_if(mp.begin(), mp.end(), [](const auto& it){
return (it.second == 2);
});
std::cout << (it->first);
}
void func2(const std::map<int, int>& mp) {
for (auto it = mp.begin(); it != mp.end(); ++it) {
if (it->second == 2) {
std::cout << (it->first);
break;
}
}
}
int main() {
std::map<int, int> mp {{1, 2}, {3, 4}};
func1(mp);
func2(mp);
return 0;
}
如您所见,我有两个执行相同工作的函数。一个使用
std::find_if()
,另一个使用 for
循环。
我在 C++11 之后见过很多类似
func1()
的代码,但从我的角度来看,std::find_if()
使用了 lambda,因此它的性能可能会更差。
我的说法正确吗?我什么时候应该使用其中一种而不是另一种?
我试图询问谷歌,但我没有找到任何可以说服我的东西。
这两种方法具有相同的时间复杂度𝑂(𝑛),但由于其清晰性,通常首选 std::find_if。在现实场景中,编译器有效地优化了这两种方法,因此性能差异通常可以忽略不计。