Acceder y Modificar Valores
Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 25 de 56.
Una vez que tengas un mapa con pares clave-valor, a menudo necesitarás recuperar o actualizar los valores almacenados en él. El operador de corchetes [] proporciona una forma conveniente tanto de acceder a los valores existentes como de modificarlos.
Para acceder a un valor, simplemente usa la clave dentro de corchetes:
std::map<std::string, int> scores;
scores["Alice"] = 95;
int aliceScore = scores["Alice"]; // Obtiene 95La misma sintaxis funciona para actualizar valores existentes:
scores["Alice"] = 98; // Actualiza la puntuación de Alice a 98He aquí un comportamiento importante que debes recordar: si usas el operador [] con una clave que no existe en el mapa, automáticamente crea un nuevo elemento con esa clave y lo inicializa con un valor por defecto (0 para enteros, una cadena vacía para cadenas, etc.).
int bobScore = scores["Bob"]; // Crea "Bob" con el valor 0Esta función de creación automática hace que el operador [] sea muy conveniente tanto para leer como para escribir datos de mapas, ya que no es necesario comprobar si una clave existe antes de usarla.
También puedes iterar a través de todos los pares clave-valor en un mapa usando un bucle for basado en rangos. Cada elemento en el mapa es un pair, donde pair.first contiene la clave y pair.second contiene el valor:
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Esto imprimirá cada par clave-valor almacenado en el mapa, uno por línea.
Desafío
FácilCrea un programa que gestione un sistema de inventario de productos utilizando un std::map. Tu programa rastreará los nombres de los productos y sus cantidades de stock actuales, permitiéndote acceder y actualizar los niveles de inventario.
Se proporcionarán las siguientes entradas:
- Un entero
nque representa el número de productos iniciales - Luego
npares de entradas:- Una cadena que representa el nombre del producto
- Un entero que representa la cantidad de stock inicial
- Una cadena que representa el nombre de un producto a actualizar
- Un entero que representa la nueva cantidad de stock para ese producto
Tu programa debe:
- Crear un
std::map<std::string, int>llamadoinventory - Leer el número de productos iniciales
- Para cada producto, leer el nombre y la cantidad de stock, luego agregarlos al mapa utilizando la notación de corchetes
- Imprimir el inventario inicial en el formato que se muestra a continuación
- Leer el nombre del producto y la nueva cantidad para actualizar
- Usar el operador de corchetes para actualizar la cantidad de stock del producto especificado
- Imprimir el inventario actualizado mostrando el nivel de stock modificado
Utiliza exactamente el siguiente formato de salida:
Initial Inventory:
[product1]: [quantity1]
[product2]: [quantity2]
[product3]: [quantity3]
...
Updated Inventory:
[product1]: [quantity1]
[product2]: [updated_quantity2]
[product3]: [quantity3]
...Los productos deben imprimirse en el orden en que aparecen al iterar a través del mapa (orden alfabético por nombre de producto). Utiliza un bucle for basado en rangos para iterar a través del mapa en ambas ocasiones, accediendo a cada par clave-valor con pair.first para el nombre del producto y pair.second para la cantidad. Si el nombre del producto a actualizar no existe en el mapa, el operador de corchetes creará automáticamente una nueva entrada con ese nombre y la cantidad especificada.
Hoja de referencia
Usa el operador de corchetes [] para acceder y modificar los valores del mapa:
std::map<std::string, int> scores;
scores["Alice"] = 95; // Establecer valor
int aliceScore = scores["Alice"]; // Obtener valor
scores["Alice"] = 98; // Actualizar valorSi usas [] con una clave que no existe, crea automáticamente un nuevo elemento con un valor por defecto:
int bobScore = scores["Bob"]; // Crea "Bob" con el valor 0Usa un bucle for basado en rangos para iterar a través de todos los pares clave-valor. Cada par tiene .first para la clave y .second para el valor:
for (auto pair : scores) {
// pair.first = clave (por ejemplo, "Alice")
// pair.second = valor (por ejemplo, 98)
}Pruébalo tú mismo
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Leer el número de productos iniciales
int n;
cin >> n;
// Crear el mapa del inventario
map<string, int> inventory;
// Leer los productos iniciales y sus cantidades
for (int i = 0; i < n; i++) {
string product;
int quantity;
cin >> product >> quantity;
// TODO: Agregar el producto al mapa del inventario
}
// TODO: Imprimir el inventario inicial
// Leer el producto a actualizar y la nueva cantidad
string updateProduct;
int newQuantity;
cin >> updateProduct >> newQuantity;
// TODO: Actualizar la cantidad del producto en el mapa
// TODO: Imprimir el inventario actualizado
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