2009-04-20 4 views
2

Existe-t-il un moyen d'utiliser des algorithmes stl comme find() et find_if() dans un conteneur d'objets? Ex.: Avec find() trouve l'élément dont le nom est "abc" dans un vecteur de classe Alfhabetic.Algorithme stl dans la classe

Répondre

7

Vous pouvez définir un prédicat de comparaison (foncteur). Voici une implémentation générique:

struct AlphabeticNameComp 
{ 
    AlphabeticNameComp(const std::string& toCompare) 
     : toCompare_(toCompare) { } 

    bool operator()(const Alphabetic& obj) const 
    { 
     return toCompare_ == obj.name(); 
    } 

private: 
    const std::string toCompare_; 
}; 

Dans un vecteur d'éléments alphabétiques

std::vector< Alphabetic> vect; 

vous pouvez lancer une recherche comme:

std::find_if(vect.begin(), vect.end(), AlphabeticNameComp("abc")); 
1

Vous pouvez définir une operator==() pour la classe Alfhabetic qui correspond seul le membre de données abc

quelque chose comme ça:

bool operator==(const Alfhabetic& a, const Alfhabetic& b) 
{ 
    return (a.abc == b.abc); 
} 

puis trouver une instance Alfhabetic initialisé avec abc que la valeur souhaitée.