Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

Crea 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 n que representa el número de estudiantes
  • Luego n pares de entradas:
    • Una cadena que representa el nombre del estudiante
    • Un entero que representa la puntuación del estudiante

Tu programa debe:

  1. Crear un std::map<std::string, int> llamado grades
  2. Leer el número de estudiantes
  3. Para cada estudiante, leer su nombre y puntuación, luego agregarlos al mapa utilizando la notación de corchetes
  4. Después de agregar a todos los estudiantes, imprimir la información de cada estudiante en el formato que se muestra a continuación
  5. 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;
}
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