Menu
Coddy logo textTech

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 95

La misma sintaxis funciona para actualizar valores existentes:

scores["Alice"] = 98; // Actualiza la puntuación de Alice a 98

He 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 0

Esta 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.

challenge icon

Desafío

Fácil

Crea 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 n que representa el número de productos iniciales
  • Luego n pares 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:

  1. Crear un std::map<std::string, int> llamado inventory
  2. Leer el número de productos iniciales
  3. Para cada producto, leer el nombre y la cantidad de stock, luego agregarlos al mapa utilizando la notación de corchetes
  4. Imprimir el inventario inicial en el formato que se muestra a continuación
  5. Leer el nombre del producto y la nueva cantidad para actualizar
  6. Usar el operador de corchetes para actualizar la cantidad de stock del producto especificado
  7. 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 valor

Si 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 0

Usa 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;
}
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