我有一个包含一个类的 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/