2013-08-25 4 views
0

définies par l'utilisateur Après le début suivant:Utilisez le std :: find() pour rechercher un vecteur de structures

#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(); 

... Je veux utiliser la fonction Recherche() pour rechercher les champs de valeur des Entrées OBJECT dans le vecteur comme:

find (begin, end, TEMP); 

(et plus tard sur un objet CONTRE ++ sur l'OBJECT trouvé).

Ceci n'est pas possible par défaut car TEMP n'est pas de type OBJECT mais un caractère.

Des idées?

En tant qu'étudiant, je n'ai pas été en mesure de traduire les suggestions en code de travail, j'ai donc écrit ma propre solution autour de la méthode .at() et j'ai supprimé les itérateurs début et fin.

int MyCollectionIterator=MyCollection.size(); 

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

Cette question peut vous aider à http://stackoverflow.com/questions/589985/vectors-structs-and-stdfind/590010#590010 – mathematician1975

Répondre

1

Vous voulez utiliser std::find_if quelque chose comme ceci:

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++; 
} 
Questions connexes