J'ai un map
comme ceci:
map<string, pair<string,string> > myMap;
Et j'ai inséré des données dans ma carte en utilisant:
myMap.insert(make_pair(first_name, make_pair(middle_name, last_name)));
Comment puis-je maintenant imprimer toutes les données de ma carte?
for(map<string, pair<string,string> >::const_iterator it = myMap.begin();
it != myMap.end(); ++it)
{
std::cout << it->first << " " << it->second.first << " " << it->second.second << "\n";
}
En C++ 11, vous n'avez pas besoin d'épeler map<string, pair<string,string> >::const_iterator
. Vous pouvez utiliser auto
for(auto it = myMap.cbegin(); it != myMap.cend(); ++it)
{
std::cout << it->first << " " << it->second.first << " " << it->second.second << "\n";
}
Notez l'utilisation des fonctions cbegin()
et cend()
.
Plus facile encore, vous pouvez utiliser la boucle for basée sur la plage:
for(auto elem : myMap)
{
std::cout << elem.first << " " << elem.second.first << " " << elem.second.second << "\n";
}
Si votre compilateur prend en charge (au moins une partie de) C++ 11, vous pouvez faire quelque chose comme:
for (auto& t : myMap)
std::cout << t.first << " "
<< t.second.first << " "
<< t.second.second << "\n";
Pour C++ 03, j'utiliserais std::copy
avec un opérateur d’insertion à la place:
typedef std::pair<string, std::pair<string, string> > T;
std::ostream &operator<<(std::ostream &os, T const &t) {
return os << t.first << " " << t.second.first << " " << t.second.second;
}
// ...
std:copy(myMap.begin(), myMap.end(), std::ostream_iterator<T>(std::cout, "\n"));
Depuis C++ 17 , vous pouvez utiliser basé sur une plage pour les boucles avec liaisons structurées pour effectuer une itération sur votre carte. Cela améliore la lisibilité, car vous réduisez le nombre de membres first
et second
nécessaires dans votre code:
std::map<std::string, std::pair<std::string, std::string>> myMap;
myMap["x"] = { "a", "b" };
myMap["y"] = { "c", "d" };
for (const auto &[k, v] : myMap)
std::cout << "m[" << k << "] = (" << v.first << ", " << v.second << ") " << std::endl;
Sortie:
m [x] = (a, b)
m [y] = (c, d)