我有一个结构列表,如下所述:

struct Files
{
    string id;
    string path;
    string chksum;
};

以及一个包含此结构列表的变量,该变量使用idpathchksum字段描述文件列表。
list<Files> myFiles;

我需要实现一个函数来搜索我的列表中是否存在已确定的文件名。
我试图使用find_if算法,但我得到了非常奇怪的错误,我不确定如何有效地实现这一点。
string filename = "mytext.txt";

auto match = std::find_if(myFiles.cbegin(), myFiles.cend(), [] (const Files& s) {
  return s.path == filename;
});

if (match != myFiles.cend())
{
    cout << "omg my file was found!!! :D";
}
else
{
    cout << "your file is not here :(";
}

最佳答案

您需要将filename添加到lambda的捕获列表中:

string filename = "mytext.txt";

auto match = std::find_if(myFiles.cbegin(), myFiles.cend(), [filename] (const Files& s) {
    return s.path == filename;
});

if (match != myFiles.cend())
{
    cout << "omg my file was found!!! :D";
}
else
{
    cout << "your file is not here :(";
}

09-07 23:53