Maison > développement back-end > C++ > Comment rechercher efficacement des éléments dans un vecteur de structures à l'aide de variables membres spécifiques ?

Comment rechercher efficacement des éléments dans un vecteur de structures à l'aide de variables membres spécifiques ?

Mary-Kate Olsen
Libérer: 2024-10-31 08:29:30
original
680 Les gens l'ont consulté

How to Efficiently Find Elements in a Vector of Structs Using Specific Member Variables?

Recherche d'éléments dans des vecteurs de structures à l'aide de std::find

La recherche d'éléments spécifiques dans un vecteur peut être difficile, en particulier lorsqu'il s'agit de structures personnalisées. Cette question explore une approche efficace pour localiser un élément dans un vecteur de structures en ciblant une variable membre particulière.

Considérez le monstre de structure fourni avec divers attributs. Le but est de rechercher un monstre avec une valeur d'identification spécifique au sein d'un vecteur monstres. La fonction standard std::find à elle seule est insuffisante pour cette tâche car elle compare la structure entière, et non les variables membres individuelles.

Pour surmonter cette limitation, une solution consiste à utiliser la fonction std::find_if. std::find_if prend un prédicat comme troisième paramètre, permettant des critères de comparaison personnalisés. Dans ce cas, le prédicat vérifierait la variable membre id de chaque monstre du vecteur.

L'extrait de code suivant montre comment utiliser std::find_if avec une fonction de bibliothèque Boost :

<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

Si vous n'avez pas accès à Boost, vous pouvez définir votre objet fonction personnalisé pour obtenir le même résultat :

<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

Ces solutions parcourent efficacement le vecteur, en vérifiant la variable membre id de chaque monstre par rapport au ID cible et renvoie un itérateur pointant vers l'élément correspondant s'il est trouvé.

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!

source:php.cn
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