Lors d'une recherche dans un vecteur de structures personnalisées, vous pouvez rencontrer des difficultés pour isoler et itérer sur des éléments spécifiques. Cet article explore une solution à ce problème en utilisant les fonctions de bibliothèque standard de C.
Problème :
Considérez la structure suivante :
<code class="cpp">struct monster { DWORD id; int x; int y; int distance; int HP; };</code>
Création d'un vecteur de ces structures :
<code class="cpp">std::vector<monster> monsters;</code>
Vous souhaitez rechercher un monstre spécifique dans le vecteur en fonction de son élément id.
Solution :
Pour rechercher un élément en fonction d'un champ spécifique, utilisez la fonction std::find_if au lieu de std::find. std::find_if vous permet de spécifier une fonction de prédicat qui filtre les éléments du vecteur.
Voici deux façons d'aborder cela en utilisant std::find_if:
1. Utilisation des bibliothèques Boost :
Si vous disposez de bibliothèques Boost disponibles, vous pouvez utiliser le code suivant :
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
2. Création d'un objet fonction personnalisé :
Si vous n'avez pas Boost, créez un objet fonction personnalisé comme suit :
<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; } };</code>
Utilisez ensuite cet objet fonction dans std::find_if :
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), find_id(currentMonster));</code>
Cela parcourra le vecteur des monstres et recherchera le monstre avec l'identifiant spécifié. L'itérateur renvoyé par std::find_if peut ensuite être utilisé pour accéder au monstre 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!