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 utiliza 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 98Aquí hay un comportamiento importante que 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 por todos los pares clave-valor de un mapa utilizando un bucle for basado en rangos. Cada elemento del mapa es un par, 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á todos los pares clave-valor almacenados 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.
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 de 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 de 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 tareaPractica por tu cuenta: Compilador de C++ online