我有一个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函数。
发布于 2013-05-04 04:48:32
你已经反其道而行之了。[]
中的位是捕获;()
中的位是参数列表。在这里,您希望捕获本地变量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};
发布于 2013-05-04 04:48:23
据我所知,你的代码应该是这样的:
auto foundItem = std::find_if(selectedItems.begin(), selectedItems.end(),
[&i](LWItem const& item)
{
return item->GetID() == i;
});
这将捕获ID等于i的LWItem,其中i是先前声明的ID。
https://stackoverflow.com/questions/16366735
复制相似问题