std::find_if 与手动循环,哪个更好?

问题描述 投票:0回答:1
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,因此它的性能可能会更差。

我的说法正确吗?我什么时候应该使用其中一种而不是另一种?

我试图询问谷歌,但我没有找到任何可以说服我的东西。

c++ c++11
1个回答
0
投票

这两种方法具有相同的时间复杂度𝑂(𝑛),但由于其清晰性,通常首选 std::find_if。在现实场景中,编译器有效地优化了这两种方法,因此性能差异通常可以忽略不计。

© www.soinside.com 2019 - 2024. All rights reserved.