如何找到在两名渔政船向量的结构元素?(How to find an struct element i

2019-11-03 08:03发布

我有一个结构:

struct node
{
    string val;
    int count;
};

我已经定义了这样我的矢量:

typedef std::vector<node> StringVector;
typedef std::vector<StringVector> StringVector2D;

这里是我的代码:

string arr[6] = {"hi","mr","ben","ss","rty","ben"};

StringVector2D twoD;    

StringVector inner;
twoD.push_back(inner);  


for(int f=0;f<6;f++)
{

    node tmp;
    tmp.val = arr[f];
    tmp.count = arr[f].size();

    twoD[0].push_back(tmp); 

}


for (StringVector::iterator it = twoD[0].begin() ; it != twoD[0].end(); ++it)
{
    cout<< it->val<<endl;
}

...在这个例子中,我有我的外向量只有一个维度,从而你可以看到它是: twoD[0]

StringVector::iterator it = find(twoD[0].begin(), twoD[0].end(), "ben");

if(it == twoD[0].end())
{
    cout<<"not found"<<endl;
}

我用这个

StringVector::iterator it = find(twoD[0].begin().val, twoD[0].end().val, "ben");

StringVector::iterator it = find(twoD[0].begin()->val, twoD[0].end()->val, "ben");

但它没有工作。 欣赏任何建议。

编辑

我定义我自己的搜索:

  struct find_word
    {
        string val;
        find_word(string val) : val(val) {}
        bool operator () ( const find_word& m ) const
        {
            return m.val == val;
        }
};

在这里,称之为:

StringVector::iterator it = find_if(twoD[0].begin()->val, twoD[0].end()->val, find_word("ben"));

但不能使它工作。

Answer 1:

你需要改变的比较器仿函数find_if

struct find_word {
    string val;
    find_word(string val) 
      : val(val) {}
    bool operator()(const node& m) const { return m.val == val; }
}; //                     ^^^^ the change is here 

并使用find_if的版本是这样的:

StringVector::iterator it = find_if(twoD[0].begin(), twoD[0].end(), find_word("ben"));
//                              the change is here ^     and here ^

所述的比较器算符find_if接收作为参数的operator()在容器的一个元素找到,在这种情况下, twoD[0].begin()twoD[0].end()给你访问的元素内矢量和参数接收是在内部向量元素存储类型node



文章来源: How to find an struct element in a two dimention vector?