std::find_if 中的 C++ lambda 表达式?

标签 c++ algorithm c++11 stl lambda

我有一个包含一个类的 std::map 并且该类有一个 id。我有一个我想在集合中找到的 id

typedef std::set<LWItem> ItemSet;
ItemSet selectedItems;
LWItemID i = someID;

ItemSet::iterator isi;
isi = std::find_if(selectedItems.begin(), selectedItems.end(), [&a](LWItemID i)->bool { return a->GetID()==i; } 

我收到一条错误消息,提示找不到 lambda 捕获变量,但我不知道我应该怎么做才能让它在迭代时捕获容器内容。 另外,我知道我不能用循环来做到这一点,但我正在尝试学习 lambda 函数。

最佳答案

你的捕获和论点颠倒了。 [] 中的位是捕获; () 中的位是参数列表。在这里,您要捕获局部变量 i 并将 a 作为参数:

[i](LWItem a)->bool { return a->GetID()==i; } 

这实际上是创建具有局部变量 i 的仿函数类的简写:

struct {
   LWItemID i;
   auto operator()(LWItem a) -> bool { return a->GetID()==i; } 
} lambda = {i};

关于std::find_if 中的 C++ lambda 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16366735/

相关文章:

c++ - 保存通过递归回溯找到的最佳路径

c++ - 总结两个 boost::accumulator_set 实例

c++ - 网页组装 |错误 : invalid argument '-std=c++11' not allowed with 'C/ObjC'

c++ - boost::thread - 简单示例不起作用 (C++)

java - 使用多个属性查找匹配对象

ruby - 快速解决字谜

c++ - 我可以继承 C++11 中的构造函数并初始化一些额外的东西而不必重写构造函数吗?

C++如何计算字符串在数据中出现的次数

templates - 使用多个模板的运算符重载

c++ - 新建一个打开的窗口并插入图片