Menu
Coddy logo textTech

Iterar sobre un Mapa

Parte de la sección Lógica y Flujo del Journey de C++ de Coddy. Lección 28 de 56.

Ahora que ya sabes cómo crear, modificar y eliminar elementos de un mapa, aprendamos a recorrer todos los pares clave-valor de tu mapa. El bucle for basado en rangos proporciona una forma elegante de iterar a través de cada elemento en un std::map.

Aquí tienes la sintaxis básica para iterar sobre un mapa:

for (auto pair : myMap) {
    // Accede a la clave con pair.first
    // Accede al valor con pair.second
}

Cada elemento del bucle es un objeto de par que contiene dos miembros importantes: first contiene la clave y second contiene el valor. Aquí tienes un ejemplo práctico:

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

Esto imprimirá el nombre de cada estudiante seguido de su puntuación. La palabra clave auto determina automáticamente el tipo correcto para cada par, haciendo que tu código sea más limpio y fácil de leer.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de menú de restaurante usando un std::map. Tu programa almacenará los platos del menú y sus precios, y después mostrará el menú completo iterando sobre todos los pares clave-valor.

Se proporcionarán las siguientes entradas:

  • Un entero n que representa el número de platos del menú
  • Después, n pares de entradas:
    • Una cadena que representa el nombre del plato
    • Un double que representa el precio del plato

Tu programa debe:

  1. Crear un std::map<std::string, double> llamado menu
  2. Leer el número de platos del menú
  3. Para cada plato del menú, leer el nombre y el precio, y después añadirlos al mapa usando la notación de corchetes
  4. Usar un bucle for basado en rangos para iterar sobre todo el mapa e imprimir cada plato con su precio
  5. Calcular e imprimir el número total de elementos del menú

Usa el siguiente formato de salida exacto:

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

Los platos del menú deben imprimirse en el orden en que aparecen al iterar sobre el mapa (orden alfabético por nombre del plato). Usa un bucle for basado en rangos con auto pair : menu para iterar sobre el mapa, accediendo a cada par clave-valor con pair.first para el nombre del plato y pair.second para el precio. Imprime cada precio con exactamente 2 posiciones decimales usando std::fixed y std::setprecision(2).

Pruébalo tú mismo

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

int main() {
    // Leer el número de elementos del menú
    int n;
    cin >> n;
    
    // Crear el mapa del menú
    map<string, double> menu;
    
    // Leer los elementos del menú y sus precios
    for (int i = 0; i < n; i++) {
        string dish;
        double price;
        cin >> dish >> price;
        // TODO: Agregar el plato y el precio al mapa del menú
    }
    
    // TODO: Imprimir el encabezado "Restaurant Menu:"
    
    // TODO: Usar un bucle for basado en rangos para iterar a través del menú e imprimir cada elemento
    // Formato: [dish]: $[price] con 2 decimales
    
    // TODO: Imprimir el número total de elementos del menú
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de C++ online