Recherche de vecteurs de structures avec std::find
Lorsque vous travaillez avec des vecteurs de structures de données complexes telles que des structures, le std::find devient insuffisante si vous devez rechercher des éléments spécifiques en fonction de leurs propriétés internes. À l'aide d'un exemple simple, nous allons explorer comment surmonter cette limitation.
Considérez la structure suivante :<code class="cpp">struct monster { DWORD id; int x; int y; int distance; int HP; };</code>
monstres nommé bot.monsters. Pour rechercher un monstre avec un identifiant spécifique, nous pourrions utiliser std::find, mais comme l'ID est membre de la structure monster, nous devons indiquer à la fonction comment accédez-y.
La fonctionstd::find_if fournit un moyen de spécifier un critère personnalisé. Nous pouvons définir une fonction lambda qui extrait l'ID de chaque monstre et le compare à notre ID cible :
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
currentMonster ID.
Si vous n'avez pas accès à la bibliothèque Boost, vous pouvez écrire votre propre objet fonction :<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>
std::find_if et un critère personnalisé, nous pouvons rechercher efficacement des vecteurs de structures de données complexes en fonction de leur valeurs de membre spécifiques, offrant une plus grande flexibilité dans la manipulation des données.
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!