Recherche d'éléments dans des vecteurs de structures à l'aide de std::find
La recherche d'éléments spécifiques dans un vecteur peut être difficile, en particulier lorsqu'il s'agit de structures personnalisées. Cette question explore une approche efficace pour localiser un élément dans un vecteur de structures en ciblant une variable membre particulière.
Considérez le monstre de structure fourni avec divers attributs. Le but est de rechercher un monstre avec une valeur d'identification spécifique au sein d'un vecteur monstres. La fonction standard std::find à elle seule est insuffisante pour cette tâche car elle compare la structure entière, et non les variables membres individuelles.
Pour surmonter cette limitation, une solution consiste à utiliser la fonction std::find_if. std::find_if prend un prédicat comme troisième paramètre, permettant des critères de comparaison personnalisés. Dans ce cas, le prédicat vérifierait la variable membre id de chaque monstre du vecteur.
L'extrait de code suivant montre comment utiliser std::find_if avec une fonction de bibliothèque Boost :
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
Si vous n'avez pas accès à Boost, vous pouvez définir votre objet fonction personnalisé pour obtenir le même résultat :
<code class="cpp">struct find_id : std::unary_function<monster, bool> { DWORD id; find_id(DWORD id) : id(id) {} bool operator()(monster const& m) const { return m.id == id; } }; it = std::find_if(bot.monsters.begin(), bot.monsters.end(), find_id(currentMonster));</code>
Ces solutions parcourent efficacement le vecteur, en vérifiant la variable membre id de chaque monstre par rapport au ID cible et renvoie un itérateur pointant vers l'élément correspondant s'il est trouvé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!