Maison >développement back-end >C++ >Comment rechercher efficacement des éléments dans un vecteur de structures à l'aide de std :: find_if ?
Lorsque vous travaillez avec des structures de données complexes telles que des structures, la recherche dans un vecteur de ces éléments peut devenir difficile . Dans ce contexte, la fonction std::find fournit une solution pour identifier des éléments spécifiques dans un vecteur.
Considérons une définition de structure comme celle-ci :
<code class="cpp">struct monster { DWORD id; int x; int y; int distance; int HP; };</code>
Maintenant, disons que nous avons un vecteur de monstres :
<code class="cpp">std::vector<monster> monsters;</code>
Pour rechercher un élément basé sur un champ spécifique dans la structure, comme l'ID du monstre, nous devons utiliser std::find_if au lieu de std::find. std::find_if prend une fonction prédicat comme argument, ce qui nous permet de définir les critères de recherche.
Voici un exemple utilisant la bibliothèque boost :
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
Ou, si boost ne l'est pas disponible, vous pouvez créer votre propre objet de fonction find_id comme ceci :
<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>
En utilisant std::find_if et la fonction de prédicat appropriée, vous pouvez rechercher efficacement dans un vecteur de structures pour trouver des éléments spécifiques en fonction de leur variables membres.
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!