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 cómo 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í está 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 en el bucle es un objeto pair 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 el sistema de un menú de restaurante utilizando un std::map. Tu programa almacenará los platos del menú y sus precios, luego mostrará el menú completo iterando a través de todos los pares clave-valor.

Se proporcionarán las siguientes entradas:

  • Un entero n que representa el número de elementos del menú
  • Luego 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 elementos del menú
  3. Para cada elemento del menú, leer el nombre del plato y el precio, luego añadirlos al mapa utilizando la notación de corchetes
  4. Usar un bucle for basado en rangos para iterar a través de todo el mapa e imprimir cada plato con su precio
  5. Calcular e imprimir el número total de elementos en el menú

Utiliza exactamente el siguiente formato de salida:

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

Los elementos del menú deben imprimirse en el orden en que aparecen al iterar a través del mapa (orden alfabético por nombre del plato). Usa un bucle for basado en rangos con auto pair : menu para iterar a través del 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 decimales usando std::fixed y std::setprecision(2).

Hoja de referencia

Usa un bucle for basado en rangos para iterar a través de todos los pares clave-valor en un std::map:

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

Cada elemento es un objeto pair donde first contiene la clave y second contiene el valor:

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

La palabra clave auto determina automáticamente el tipo correcto para cada par.

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 los 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