Menu
Coddy logo textTech

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.

challenge icon

Défi

Facile

Cré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 n représentant le nombre d'articles au menu
  • Ensuite n paires 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 :

  1. Créer un std::map<std::string, double> nommé menu
  2. Lire le nombre d'articles au menu
  3. Pour chaque article du menu, lire le nom du plat et le prix, puis les ajouter à la map en utilisant la notation entre crochets
  4. 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
  5. 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;
}
quiz iconTestez-vous

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