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.
Desafío
FácilCrea 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
nque representa el número de elementos del menú - Luego
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 elementos del menú
- Para cada elemento del menú, leer el nombre del plato y el precio, luego añadirlos al mapa utilizando la notación de corchetes
- Usar un bucle for basado en rangos para iterar a través de todo el mapa e imprimir cada plato con su precio
- 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;
}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 tarea