2011-05-29 3 views
0

Possible en double:
How to find an item in a std::vector?RECHERCHE ou TROUVE intérieur du problème vectoriel

Compte tenu de ces deux classes:

class Book 
{ 
private: 

    string title; 
    int category; 

public: 

    Book(const string& , int num); 
} 

Book(const string& name, int num) 
    :title(name), category(num) 
{ } 



class Reader 
{ 
private: 

string reader_name; 
vector <Book> bookLists; 

public: 

void add(const Book &ref); 
}; 

void add(const Book& ref) 
{ 
    // My problem is here. 
} 

Je veux chercher dans le vecteur du livre. Si le Livre est dans le vecteur du Livre, il ne fait rien. Si le livre est pas dans le vecteur du livre bookLists.push_back(ref);

+0

Vous pourriez trouver [cette question] (http://stackoverflow.com/questions/571394/how-to-find-an-item-in-a-stdvector) utile. – Diederik

Répondre

1

Vous devez utiliser:

std::find(bookLists.begin(), bookLists.end(), bookItemToBeSearched)!=bookLists.end(). 

std::find retours:
Itérateur au premier élément dans la plage qui correspond à la valeur OU
Si aucune correspondance d'élément , la fonction retourne en dernier.

Vérifiez plus sur l'algorithme std::findhere.

+0

Merci! si Find == vector.end() qu'est-ce que cela signifie ?? et trouver! = Vector.end() ?? – newb

+0

@newb: Jetez un oeil à la référence: http://www.cplusplus.com/reference/algorithm/find/ – Norbert

0
void add(const Book& ref) 
{ 
    if(std::find(bookLists.begin(), bookLists.end(), ref)==bookLists.end()) 
    { 
     bookLists.push_back(ref); 
    } 
} 
+0

Merci! Dois-je indiquer n'importe quel itérateur vectoriel? – newb

+0

Vous aurez besoin de définir Book :: operator == pour que cela fonctionne, puisque std :: find ne peut pas "deviner" sur quels critères vous voulez comparer les livres (les titres sont-ils suffisants? Ont-ils besoin d'être physiquement identiques? objet ?). Par exemple, vous pouvez définir bool Book :: operator == (const Book & autres) const {return title == other.title && category == other.category; } – ZeRemz

+0

Merci ZeRemz. Je ne savais pas que je dois définir Book :: operator == c'est pourquoi je continuais à recevoir une erreur de compilation – newb