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
2
A
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.