以下开始之后:
#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;
}
答案 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++;
}