Menu
Coddy logo textTech

Iterare su una mappa

Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 28 di 56.

Ora che sai come creare, modificare e rimuovere elementi da una mappa, impariamo come scorrere tutte le coppie chiave-valore della tua mappa. Il ciclo for basato su intervalli offre un modo elegante per iterare su ogni elemento di una std::map.

Ecco la sintassi di base per iterare su una mappa:

for (auto pair : myMap) {
    // Accedi alla chiave con pair.first
    // Accedi al valore con pair.second
}

Ogni elemento nel ciclo è un oggetto coppia che contiene due membri importanti: first contiene la chiave e second contiene il valore. Ecco un esempio pratico:

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;
}

Questo stamperà il nome di ogni studente seguito dal suo punteggio. La parola chiave auto determina automaticamente il tipo corretto per ogni coppia, rendendo il tuo codice più pulito e facile da leggere.

challenge icon

Sfida

Facile

Crea un programma che gestisca il sistema del menu di un ristorante usando std::map. Il programma memorizzerà le voci del menu e i relativi prezzi, quindi mostrerà il menu completo iterando su tutte le coppie chiave-valore.

Verranno forniti i seguenti input:

  • Un intero n che rappresenta il numero di voci del menu
  • Poi n coppie di input:
    • Una stringa che rappresenta il nome del piatto
    • Un double che rappresenta il prezzo del piatto

Il programma dovrebbe:

  1. Creare una std::map<std::string, double> chiamata menu
  2. Leggere il numero di voci del menu
  3. Per ogni voce del menu, leggere il nome del piatto e il prezzo, poi aggiungerli alla mappa usando la notazione con parentesi quadre
  4. Usare un ciclo for basato su intervallo per iterare sull'intera mappa e stampare ogni piatto con il relativo prezzo
  5. Calcolare e stampare il numero totale di voci nel menu

Usa il seguente formato di output esatto:

Restaurant Menu:
[dish1]: $[price1]
[dish2]: $[price2]
[dish3]: $[price3]
...
Total menu items: [number of items]

Le voci del menu devono essere stampate nell'ordine in cui compaiono durante l'iterazione sulla mappa (ordine alfabetico per nome del piatto). Usa un ciclo for basato su intervallo con auto pair : menu per iterare sulla mappa, accedendo a ciascuna coppia chiave-valore con pair.first per il nome del piatto e pair.second per il prezzo. Stampa ogni prezzo con esattamente 2 cifre decimali usando std::fixed e std::setprecision(2).

Provalo tu

#include <iostream>
#include <map>
#include <string>
#include <iomanip>
using namespace std;

int main() {
    // Leggi il numero di voci del menu
    int n;
    cin >> n;
    
    // Crea la mappa menu
    map<string, double> menu;
    
    // Leggi le voci del menu e i prezzi
    for (int i = 0; i < n; i++) {
        string dish;
        double price;
        cin >> dish >> price;
        // TODO: Aggiungi dish e price alla mappa menu
    }
    
    // TODO: Stampa l'intestazione "Restaurant Menu:"
    
    // TODO: Usa un ciclo for basato su intervallo per scorrere menu e stampare ogni elemento
    // Formato: [dish]: $[price] con 2 cifre decimali
    
    // TODO: Stampa il numero totale di voci del menu
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C++ online