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!