使用std :: find()搜索用户定义结构的向量

时间:2013-08-25 15:58:00

标签: c++ vector

以下开始之后:

#include <vector>
#include <algorithm>

struct OBJECT{
        char VALUE;
        int COUNTER;
}
vector <OBJECT> MyCollection;   
vector <OBJECT> ::iterator begin,end;
char TEMP;

begin=MyCollection.begin();
end=MyCollection.end();

...我想使用Find()函数搜索向量中OBJECT条目的VALUE字段,如:

find (begin, end, TEMP);

(后来成功在找到的OBJECT上做了一个COUNTER ++。)

默认情况下这是不可能的,因为TEMP不是OBJECT类型而是char。

有什么想法吗?

作为一名学生,我无法将建议翻译成工作代码,因此围绕.at()方法编写了我自己的解决方案,并删除了迭代器的开始和结束。

int MyCollectionIterator=MyCollection.size(); 

while(1){
  if(MyCollectionIterator){ 
    if( MyCollection.at(--MyCollectionIterator).VALUE==TEMP ){
          MyCollection[MyCollectionIterator].COUNTER++; 
          break;
    }
  }else break;
} 

1 个答案:

答案 0 :(得分:1)

您想使用std::find_if这样的内容:

struct is_equal {
    char target_;
    isEqual(char target) : target_(target) {};
    bool operator () (const OBJECT& obj) {
        return obj.VALUE == target_;
    };
};
char target_char = // set this to the character you're looking for
vector<OBJECT>::iterator it = std::find_if(begin, end, is_equal(target_char));
if (it != end) {
    it->COUNTER++;
}