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

Comment rechercher des vecteurs de structures en fonction de propriétés internes : un guide sur std :: find_if

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 22:14:02977parcourir

How to Search Vectors of Structs Based on Internal Properties: A Guide to 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 fonction

std::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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn