我可以在vc ++ [VS 2019]中使用带有lambda函数的std :: find()吗?

问题描述 投票:0回答:2
  • OS:Windows 10 Pro 64位(10.0,内部版本18362)
  • IDE:Visual Studio 2019(版本16.4.3)[在此之前,我正在使用VS 2010]]
  • 语言:c ++和VC ++

这是我的简单代码,我只想在其中找到元素3并在找到后打印出来

    std::vector<int> intVect;

    for (int counter = 0; counter < 5; counter++)
    {
        intVect.push_back(counter);
    }

    std::find(intVect.begin(), intVect.end(), [](int a)
        {
            if (a == 3)
            {
                std::cout << "Item Found.." << std::endl;
            }
        });

探针是当我编译这段代码时,给我类似下面的错误:

错误C2678二进制'==':找不到左手运算符'int'类型的操作数(或没有可接受的转换)c:\ Program Files(x86)\ Microsoft Visual Studio10.0 \ VC \ include \ algorithm 41

c++ c++11
2个回答
2
投票

您无需使用lambda即可轻松完成此操作:

auto val = std::find(intVect.begin(), intVect.end(), 3);
if (val != intVect.end()) {
   std::cout << "Value found\n";
}

但是,也可以使用lambda,但是您需要使用std::find_if(与std::find_ifstd::find相同的标头中提供:]

<algorithm>

但是确实没有意义。在这种情况下,如果您有更复杂的内容(例如auto val = std::find_if(intVect.begin(), intVect.end(), [](int i) { return i == 3; }); if (val != intVect.end()) { std::cout << "Value found\n"; } )并且正在搜索特定成员,则只使用find_if

struct

3
投票

[struct complex { int id; ... }; std::vector<complex> things = ...; auto val = std::find_if(things.begin(), things.end(), [](const complex& c) { return c.id == 3; }); if (val != things.end()) { std::cout << "Value found\n"; } 期望将一个值与元素进行比较,因此应为

std::find

如果要使用lambda作为谓词,则应使用std::find;请注意,lambda应该返回if (std::find(intVect.begin(), intVect.end(), 3) != intVect.end()) { std::cout << "Item Found.." << std::endl; }

std::find_if
© www.soinside.com 2019 - 2024. All rights reserved.