这是我的简单代码,我只想在其中找到元素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
您无需使用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_if
:std::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
[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