Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 定义lambda以搜索指向自定义类型的指针向量_C++_Vector_Stl_Lambda - Fatal编程技术网

C++ 定义lambda以搜索指向自定义类型的指针向量

C++ 定义lambda以搜索指向自定义类型的指针向量,c++,vector,stl,lambda,C++,Vector,Stl,Lambda,我想根据属性搜索由指向自定义类型的指针组成的向量。但我不知道如何正确定义lambda。这是我的密码 template<typename T> class State { public: unsigned int id; ... }; 模板 阶级国家{ 公众: 无符号整数id; ... }; 另一个类包含状态指针向量: class System { public: std::vector<State<type>*> list_; State&

我想根据属性搜索由指向自定义类型的指针组成的向量。但我不知道如何正确定义lambda。这是我的密码

template<typename T>
class State {
public:
  unsigned int id;
  ...
};
模板
阶级国家{
公众:
无符号整数id;
...
};
另一个类包含状态指针向量:

class System {
public:
  std::vector<State<type>*> list_;
  State<type>* getState(unsigned int id) {
    auto it = find_if(list_.begin(), list_.end(), [id](const State<type>* st&) {st->id == id;});
    if (it == list_.end()) 
      return nullptr;
    return *it;
  }
 ...
};
类系统{
公众:
std::向量列表;
State*getState(无符号整数id){
auto it=find_if(list_u.begin(),list_u.end(),[id](const State*st&){st->id==id;});
if(it==list_uz.end())
返回空ptr;
归还它;
}
...
};
但是我在lambda定义中混淆了引用和指针。检查
列表
是否包含具有特定
id的
状态
的正确方法是什么

谢谢你的帮助


关于

首先,符号AND应位于参数名称之前:
const State*&st
。它将
st
声明为指向常量
状态的指针的引用

你还必须从lambda返回一些东西


除此之外,它看起来还可以,尽管我建议您不要使用指针(它们通常不需要),或者至少使用智能指针,如。

如果您实际从lambda.works返回值,将find调用更改为
auto it=find_if(list.begin(),list.end(),[id](const State*&st){return(st->id==id);},可能会有所帮助