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
Libérer: 2024-10-29 22:14:02
original
1023 Les gens l'ont consulté

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>
Copier après la connexion
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>
Copier après la connexion
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>
Copier après la connexion
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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal