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
Barbara Streisandoriginal
2024-11-28 06:33:10762parcourir

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());

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);
}

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);
}

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!

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