Parcourir une Map
Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 28 sur 56.
Maintenant que vous savez comment créer, modifier et supprimer des éléments d'une map, apprenons comment parcourir toutes les paires clé-valeur de votre map. La boucle for basée sur l'intervalle (range-based for loop) offre un moyen élégant d'itérer à travers chaque élément d'une std::map.
Voici la syntaxe de base pour itérer sur une map :
for (auto pair : myMap) {
// Accéder à la clé avec pair.first
// Accéder à la valeur avec pair.second
}Chaque élément de la boucle est un objet de type pair qui contient deux membres importants : first contient la clé, et second contient la valeur. Voici un exemple pratique :
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Cela affichera le nom de chaque étudiant suivi de sa note. Le mot-clé auto détermine automatiquement le type correct pour chaque paire, rendant votre code plus propre et plus facile à lire.
Défi
FacileCréez un programme qui gère le système de menu d'un restaurant en utilisant un std::map. Votre programme stockera les plats du menu et leurs prix, puis affichera le menu complet en itérant à travers toutes les paires clé-valeur.
Les entrées suivantes seront fournies :
- Un entier
nreprésentant le nombre d'articles au menu - Ensuite
npaires d'entrées :- Une chaîne de caractères représentant le nom du plat
- Un double représentant le prix du plat
Votre programme doit :
- Créer un
std::map<std::string, double>nommémenu - Lire le nombre d'articles au menu
- Pour chaque article du menu, lire le nom du plat et le prix, puis les ajouter à la map en utilisant la notation entre crochets
- Utiliser une boucle for basée sur une plage (range-based for loop) pour itérer à travers toute la map et afficher chaque plat avec son prix
- Calculer et afficher le nombre total d'articles dans le menu
Utilisez exactement le format de sortie suivant :
Restaurant Menu:
[dish1]: $[price1]
[dish2]: $[price2]
[dish3]: $[price3]
...
Total menu items: [number of items]Les articles du menu doivent être affichés dans l'ordre où ils apparaissent lors de l'itération dans la map (ordre alphabétique par nom de plat). Utilisez une boucle for basée sur une plage avec auto pair : menu pour itérer à travers la map, en accédant à chaque paire clé-valeur avec pair.first pour le nom du plat et pair.second pour le prix. Affichez chaque prix avec exactement 2 décimales en utilisant std::fixed et std::setprecision(2).
Aide-mémoire
Utilisez une boucle for basée sur une plage pour itérer à travers toutes les paires clé-valeur dans un std::map :
for (auto pair : myMap) {
// Accédez à la clé avec pair.first
// Accédez à la valeur avec pair.second
}Chaque élément est un objet pair où first contient la clé et second contient la valeur :
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Le mot-clé auto détermine automatiquement le type correct pour chaque paire.
Essayez vous-même
#include <iostream>
#include <map>
#include <string>
#include <iomanip>
using namespace std;
int main() {
// Lire le nombre d'articles au menu
int n;
cin >> n;
// Créer la map du menu
map<string, double> menu;
// Lire les articles du menu et les prix
for (int i = 0; i < n; i++) {
string dish;
double price;
cin >> dish >> price;
// TODO: Ajouter le plat et le prix à la map du menu
}
// TODO: Afficher l'en-tête "Restaurant Menu:"
// TODO: Utiliser une boucle for basée sur la plage pour parcourir le menu et afficher chaque article
// Format: [dish]: $[price] avec 2 décimales
// TODO: Afficher le nombre total d'articles au menu
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs4Maps (Paires Clé-Valeur)
Introduction à std::mapCréer une MapAccéder aux valeurs et les modifierVérifier l'existence de clésSupprimer des pairesParcourir une MapRécapitulatif - Fréquence des mots2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâche