C++ 如何使用std::find从向量的第一个元素中查找字符串<;配对<;字符串,字符串>&燃气轮机;类型?

C++ 如何使用std::find从向量的第一个元素中查找字符串<;配对<;字符串,字符串>&燃气轮机;类型?,c++,lambda,C++,Lambda,我尝试了以下代码: auto it = find(v.begin(),v.end(), name, [](const pair<string, string> &a,const string b) { return a.first == b; }); // name contains the stri

我尝试了以下代码:

    auto it = find(v.begin(),v.end(), name, [](const pair<string, string> &a,const string b)
                           {
                               return a.first == b;
                           }); // name contains the string to find.
auto it=find(v.begin(),v.end(),name,[](常量对&a,常量字符串b)
{
返回a.first==b;
}); // name包含要查找的字符串。

但这给了我编译错误。帮我找出我的错误。

您试图呼叫的过载不存在。您要使用:

auto it=std::find_if(v.begin()、v.end()、[&](常量对&a)
{
返回a.first==name;
}); // name包含要查找的字符串。

“但这给了我编译错误。”有点含糊不清。你能告诉我确切的逐字编译错误是什么吗
std::find()
不允许传递lambda比较器IIRC。在[&]中,&代表什么。我想知道,如果我甚至不在find_if和lambda函数中传递它,lambda函数如何识别“name”。令我惊讶的是,放置一个&解决了这个问题。为什么?@Sami它是一个通过引用捕获范围内所有内容的工具。@Sami或者,如果您想更明确,您也可以指定
[&name]
auto it = std::find_if(v.begin(),v.end(), [&](const pair<string, string> &a)
{
    return a.first == name;
}); // name contains the string to find.