Ant*_*nty 25 c++ algorithm lambda stl c++11
我有一个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; }
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,说找不到lambda捕获变量,但我不知道我应该做什么来让它在迭代时捕获容器内容.另外,我知道我不能用循环来做这个,但我正在尝试学习lambda函数.
eca*_*mur 29
你的捕获和争论已经逆转了.里面的位[]是捕获; 里面的位()是参数列表.在这里,您要捕获局部变量i并将其a作为参数:
[i](LWItem a)->bool { return a->GetID()==i; }
Run Code Online (Sandbox Code Playgroud)
这实际上是使用局部变量创建functor类的简写i:
struct {
LWItemID i;
auto operator()(LWItem a) -> bool { return a->GetID()==i; }
} lambda = {i};
Run Code Online (Sandbox Code Playgroud)
Jiw*_*wan 13
根据我的理解,您的代码应如下所示:
auto foundItem = std::find_if(selectedItems.begin(), selectedItems.end(),
[&i](LWItem const& item)
{
return item->GetID() == i;
});
Run Code Online (Sandbox Code Playgroud)
这将捕获ID等于i的LWItem,其中i是preiosuly声明的ID.
| 归档时间: |
|
| 查看次数: |
52457 次 |
| 最近记录: |