我有一个函数可以搜索迭代器 vector ,如果它的名称与作为参数传递的字符串匹配,则返回迭代器。
koalaGraph::PVertex lookUpByName(std::string Name, std::vector<koalaGraph::PVertex>& Vertices) {
for (size_t i = 0; i < Vertices.size(); i++) {
if(Vertices[i]->info.name == Name)
return Vertices[i];
}
}
我的问题是如何将其实现为 lambda,以便将其与 std::find_if
结合使用?
我正在尝试这个:
std::vector<koalaGraph::PVertex> V;
std::string Name;
std::find_if(V.begin(), V.end(), [&Name]() {return Name == V->info.name;})
但是它说 V
an enclosing-function local variable cannot be referenced in a lambda body unless it is in the capture list.
最佳答案
find_if
会将 vector 的元素传递给您的 lambda。这意味着你需要
std::find_if(V.begin(), V.end(), [&Name](auto const& V) {return Name == V->info.name;})
因此 lambda 主体中的 V
是 vector 的元素,而不是 vector 本身。
理想情况下,你给它起一个不同于 V
的名字,这样你就可以像这样将 vector 和局部变量分开
std::find_if(V.begin(), V.end(), [&Name](auto const& element) {return Name == elememt->info.name;})
现在很明显,您正在处理 vector 的元素,而不是 vector 本身。
关于C++ lambda 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55243276/