Maison > développement back-end > C++ > Comment extraire efficacement des clés ou des valeurs d'un std :: map dans un vecteur ?

Comment extraire efficacement des clés ou des valeurs d'un std :: map dans un vecteur ?

Barbara Streisand
Libérer: 2024-11-28 06:33:10
original
766 Les gens l'ont consulté

How to Efficiently Extract Keys or Values from a std::map into a Vector?

Récupérer des éléments de std :: map dans Vector : au-delà des foncteurs

Pour extraire des clés ou des valeurs d'un std :: map, on peut emploient instinctivement des foncteurs comme démontré dans l'extrait de code fourni :

struct RetrieveKey
{
    template <typename T>
    typename T::first_type operator()(T keyValuePair) const
    {
        return keyValuePair.first;
    }
};

map<int, int> m;
vector<int> keys;
transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey());
Copier après la connexion

Bien que cette approche soit techniquement fonctions, il souffre de l'obscurcissement du code et de la distance d'exécution par rapport à la cible.

Méthode alternative : boucle d'itérateur

Une solution plus simple implique une simple boucle sur les itérateurs de la carte :

for (map<int, int>::iterator it = m.begin(); it != m.end(); ++it) {
  keys.push_back(it->first);
}
Copier après la connexion

Cette méthode offre une lisibilité claire et une modification facile pour récupérer des valeurs au lieu de clés.

Approche de la bibliothèque Boost

Si vous utilisez la bibliothèque Boost, on peut utiliser BOOST_FOREACH pour encore plus de simplicité :

pair<int, int> me; // map element type
vector<int> v;
BOOST_FOREACH(me, m) {
  v.push_back(me.first);
}
Copier après la connexion

Cette approche fournit explicite et concis.

En résumé, même si la méthode du foncteur reste une option valable, la boucle itératrice et la bibliothèque Boost s'approchent offrent des moyens plus simples et plus intuitifs de récupérer des éléments d'un std::map dans un vecteur.

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