使用find_if()函数

时间:2014-05-23 07:56:34

标签: c++ vector std

我有一个结构矢量说&#3​​4; 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

2 个答案:

答案 0 :(得分:2)

你说你的向量有structmystruct类型的说法(即你有一个std::vector<mystruct>)。但是,您正在分配一个迭代器std::vector<mystruct>::iteratorstd::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));
}

您可以将其与您的版本进行比较,以找到错误。