Maison >développement back-end >C++ >Comment rechercher des vecteurs de structures en fonction de propriétés internes : un guide sur std :: find_if
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>Maintenant, disons que vous avez un vecteur de ces
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>Cette fonction lambda filtre efficacement le vecteur, parcourt chaque monstre et renvoie true si son ID correspond à l'ID de chaque monstre. spécifié
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>Cet objet fonction personnalisé permet nous permet d'effectuer la même recherche, mais sans avoir besoin de Boost.En utilisant
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!