我有一个结构矢量说" v"。我需要找到一个" v"其ID与给定的ID匹配。
我在另一篇文章中发现,要走的路是" find_if"。所以我实现了以下内容:
std::find_if(v.begin(), v.end(), MatchesID(id))!= v.end();
注意:我已按照帖子中的建议正确创建了MatchesID类。
现在,我如何访问包含" id"的特定矢量项?我找了?
我试过了:
std::vector<int>::iterator it = std::find_if (v.begin(), v.end(), MatchesID(id));
但它会出错。
编辑:错误C2440:&#39;初始化&#39; :无法转换为&#39; std :: _ Vector_iterator&lt; _Ty,_Alloc&gt;&#39;到&#39; std :: _ Vector_iterator&lt; _Ty,_Alloc&gt;&#39;
EDIT2:为了完整起见,我还基于帖子:Search for a struct item in a vector by member data
答案 0 :(得分:2)
你说你的向量有struct
个mystruct
类型的说法(即你有一个std::vector<mystruct>
)。但是,您正在分配一个迭代器std::vector<mystruct>::iterator
,std::find_if
将返回类型为std::vector<int>::iterator
的迭代器。解决方案:
std::vector<mystruct>::iterator it = std::find_if (v.begin(), v.end(), MatchesID(id));
或
auto it = std::find_if (v.begin(), v.end(), MatchesID(id));
答案 1 :(得分:0)
我认为这个问题已经降级为“我该如何开展这项工作”
auto there= std::find_if(v.begin(), v.end(), MatchesID(id))!= v.end();
答案是
#include <vector>
#include <algorithm>
struct MatchesID
{
int id;
MatchesID(int id): id(id){}
bool operator()(int id){ return this-> id== id; }
};
int main()
{
std::vector<int> v;
std::vector<int>::iterator i= std::find_if(v.begin(), v.end(), MatchesID(42));
}
您可以将其与您的版本进行比较,以找到错误。