首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >std::find_if中的C++λ表达式?

std::find_if中的C++λ表达式?
EN

Stack Overflow用户
提问于 2013-05-04 04:05:58
回答 2查看 58.3K关注 0票数 25

我有一个std::map,它包含一个类,并且这个类有一个id。我有一个我想要在集合里找的id

代码语言:javascript
复制
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函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-04 04:48:32

你已经反其道而行之了。[]中的位是捕获;()中的位是参数列表。在这里,您希望捕获本地变量i并将a作为参数:

代码语言:javascript
复制
[i](LWItem a)->bool { return a->GetID()==i; } 

这实际上是使用局部变量i创建函数器类的简写

代码语言:javascript
复制
struct {
   LWItemID i;
   auto operator()(LWItem a) -> bool { return a->GetID()==i; } 
} lambda = {i};
票数 29
EN

Stack Overflow用户

发布于 2013-05-04 04:48:23

据我所知,你的代码应该是这样的:

代码语言:javascript
复制
auto foundItem = std::find_if(selectedItems.begin(), selectedItems.end(), 
[&i](LWItem const& item) 
{ 
return item->GetID() == i; 
});

这将捕获ID等于i的LWItem,其中i是先前声明的ID。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16366735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档