Maison >développement back-end >C++ >Comment extraire efficacement les clés et les valeurs d'un std :: map en vecteurs ?

Comment extraire efficacement les clés et les valeurs d'un std :: map en vecteurs ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-29 20:30:11597parcourir

How to Efficiently Extract Keys and Values from a std::map into Vectors?

Récupération de clés ou de valeurs d'un std::map dans un vecteur

Récupération de toutes les clés ou valeurs d'un std::map dans un vector est une tâche courante, mais std::map lui-même ne dispose pas d'une fonction membre explicite à cet effet. Une approche consiste à définir des foncteurs personnalisés, comme démontré dans le 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;

// Retrieve all keys
transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey());

// Dump all keys
copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n"));

Cette solution manipule les données en dehors de la carte, ce qui peut ne pas être idéal dans certains cas. Une approche alternative utilisant une boucle for simple offre une solution plus claire et plus explicite :

map<int, int> m;
vector<int> key, value;
for (auto it = m.begin(); it != m.end(); ++it) {
  key.push_back(it->first);
  value.push_back(it->second);
  cout << "Key: " << it->first << endl;
  cout << "Value: " << it->second << endl;
}

En parcourant la carte de cette manière, nous pouvons extraire à la fois les clés et les valeurs directement dans des conteneurs vectoriels.

Une autre option, si vous utilisez la bibliothèque Boost, simplifie davantage le processus :

map<int,int> m;
pair<int,int> me; // what a map<int, int> is made of
vector<int> v;
BOOST_FOREACH(me, m) {
  v.push_back(me.first);
  cout << me.first << "\n";
}

Cette version est concise, lisible et fournit un contrôle explicite sur le processus de récupération. La sélection de la méthode la plus appropriée dépend des besoins spécifiques et des préférences du développeur.

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