Lección 15 · 15 de 20
Mapas · C++
Guarde pares clave-valor en C++ con std::map: el inventario de una frutería con [], count(), erase() y un recorrido en orden alfabético.

`std::map` relaciona claves con valores, como un diccionario. Se declara con los dos tipos: std::map<std::string, int> va del nombre de la fruta a su cantidad. Necesita #include <map>.
`[]` lee el valor de una clave (stock["apples"] da 12) y también lo cambia, o crea la clave si no existe: stock["kiwis"] = 20 añade los kiwis. Cuidado: solo con leer stock["bananas"] también se crearía, con valor 0.
Para comprobar una clave sin crearla está `count()`, que en un map da 0 o 1. `erase()` borra una clave junto con su valor. Y at(), como en los vectores, lanza un error si la clave no existe.
Un map guarda las claves ordenadas: al recorrerlo salen apples, kiwis y pears, en orden alfabético y no en el que se añadieron. Cada elemento es un par: item.first es la clave e item.second, el valor.
Contar es un uso clásico: letters[c]++ funciona aunque la letra todavía no esté, porque [] la crea con 0 y después le suma uno. Así se cuentan las letras de banana.
Código · main.cpp
#include <iostream>#include <map>#include <string>int main() { // A map links keys to values, and keeps the keys in order. std::map<std::string, int> stock = {{"pears", 5}, {"apples", 12}, {"plums", 0}}; std::cout << "Apples: " << stock["apples"] << '\n'; // [] changes a value, or creates the key if it is new. stock["pears"] = 8; stock["kiwis"] = 20; // count() checks a key without creating it (0 or 1). if (stock.count("bananas") == 0) std::cout << "No bananas today\n"; // erase() removes a key together with its value. stock.erase("plums"); // Each element is a pair: first is the key and second, the value. int pieces = 0; for (const auto& item : stock) { std::cout << item.first << ": " << item.second << '\n'; pieces += item.second; } std::cout << stock.size() << " fruits, " << pieces << " pieces\n"; // Counting is a classic job: a missing key starts at 0. std::map<char, int> letters; for (char c : std::string("banana")) letters[c]++; for (const auto& item : letters) std::cout << item.first << '=' << item.second << ' '; std::cout << '\n'; return 0;}Salida · c++ -std=c++17 main.cpp -o main && ./main
Apples: 12 No bananas today apples: 12 kiwis: 20 pears: 8 3 fruits, 40 pieces a=3 b=1 n=2
Para recordar
std::map<Clave, Valor>relaciona claves con valores.m[clave] = valorcambia o añade.- Leer
m[clave]crea la clave si no existe. count()comprueba una clave sin crearla yerase()la borra.- Las claves se recorren siempre en orden.
Ejercicio
Con un std::map<std::string, int>, cuente cuántas veces aparece cada color en un vector {"red", "blue", "red", "green", "blue", "red"} y escriba el resultado.