Crear un Mapa
Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 24 de 56.
Ahora que entiendes qué es un mapa, aprendamos cómo crear uno y añadirle pares clave-valor. Al declarar un std::map, debes especificar tanto el tipo de la clave como el tipo del valor usando corchetes angulares.
Aquí está la sintaxis básica para crear un mapa:
std::map<KeyType, ValueType> mapName;Por ejemplo, para crear un mapa que almacene nombres de estudiantes como claves y sus puntajes de exámenes como valores:
std::map<std::string, int> studentScores;Para añadir elementos a tu mapa, puedes usar la notación de corchetes con la clave y luego asignar un valor:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;Esto crea tres pares clave-valor en el mapa. El nombre de cada estudiante sirve como la clave que te permite recuperar rápidamente su puntuación correspondiente.
Para iterar sobre todas las entradas en un mapa, utilice un bucle for basado en rangos con auto. Cada elemento en un std::map es un par clave-valor, por lo que se accede a la clave con .first y al valor con .second:
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Aquí, auto deduce automáticamente el tipo de cada elemento, pair.first proporciona la clave (nombre del estudiante) y pair.second proporciona el valor (puntuación). Tenga en cuenta que std::map siempre itera en orden ordenado por clave.
Desafío
FácilCrea un programa que construya un sistema de seguimiento de calificaciones de estudiantes utilizando un std::map. Tu programa almacenará los nombres de los estudiantes como claves y sus puntuaciones de exámenes como valores.
Se proporcionarán las siguientes entradas:
- Un entero
nque representa el número de estudiantes - Luego
npares de entradas:- Una cadena que representa el nombre del estudiante
- Un entero que representa la puntuación del estudiante
Tu programa debe:
- Crear un
std::map<std::string, int>llamadogrades - Leer el número de estudiantes
- Para cada estudiante, leer su nombre y puntuación, luego agregarlos al mapa utilizando la notación de corchetes
- Después de agregar a todos los estudiantes, imprimir la información de cada estudiante en el formato que se muestra a continuación
- Calcular e imprimir el número total de estudiantes almacenados en el mapa
Utiliza el siguiente formato de salida exacto:
Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]Los estudiantes deben imprimirse en el orden en que aparecen al iterar a través del mapa (que será el orden alfabético, ya que los mapas se ordenan automáticamente por clave). Utiliza un bucle for basado en rangos para iterar a través del mapa, accediendo a cada par clave-valor e imprimiendo el nombre del estudiante seguido de su puntuación.
Hoja de referencia
Para crear un std::map, especifica los tipos de clave y valor entre corchetes angulares:
std::map<KeyType, ValueType> mapName;Ejemplo con claves de cadena y valores enteros:
std::map<std::string, int> studentScores;Añade elementos utilizando la notación de corchetes:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;Itera sobre un mapa utilizando un bucle for basado en rangos. Cada elemento es un par — utiliza .first para acceder a la clave y .second para acceder al valor:
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}auto deduce automáticamente el tipo de cada elemento, y const auto& evita copias innecesarias.
Pruébalo tú mismo
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Leer el número de estudiantes
int n;
cin >> n;
// Crear el mapa para almacenar las calificaciones
map<string, int> grades;
// TODO: Escribe tu código aquí
// Leer el nombre y la puntuación de cada estudiante, luego añadirlos al mapa
// Imprimir los resultados
cout << "Student Grades:" << endl;
// TODO: Usar un bucle for basado en rangos para imprimir la calificación de cada estudiante
// Imprimir el número total de estudiantes
cout << "Total students: " << grades.size() << endl;
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