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.
Desafío
FácilCrea 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
nque representa el número de platos del menú - Después,
npares de entradas:- Una cadena que representa el nombre del plato
- Un double que representa el precio del plato
Tu programa debe:
- Crear un
std::map<std::string, double>llamadomenu - Leer el número de platos del menú
- Para cada plato del menú, leer el nombre y el precio, y después añadirlos al mapa usando la notación de corchetes
- Usar un bucle for basado en rangos para iterar sobre todo el mapa e imprimir cada plato con su precio
- 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;
}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
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros4Mapas (Pares Clave-Valor)
Introducción a std::mapCrear un MapaAcceder y Modificar ValoresComprobar ClavesEliminar ParesIterar sobre un MapaResumen - Frecuencia de Palabras2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tareaPractica por tu cuenta: Compilador de C++ online