Menu
Coddy logo textTech

Acessando e Modificando Valores

Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 25 de 56.

Uma vez que você tenha um mapa com pares chave-valor, você frequentemente precisará recuperar ou atualizar os valores armazenados nele. O operador de colchetes [] fornece uma maneira conveniente de acessar valores existentes e modificá-los.

Para acessar um valor, basta usar a chave dentro de colchetes:

std::map<std::string, int> scores;
scores["Alice"] = 95;
int aliceScore = scores["Alice"]; // Obtém 95

A mesma sintaxe funciona para atualizar valores existentes:

scores["Alice"] = 98; // Atualiza a pontuação da Alice para 98

Aqui está um comportamento importante a ser lembrado: se você usar o operador [] com uma chave que não existe no mapa, ele cria automaticamente um novo elemento com essa chave e o inicializa com um valor padrão (0 para inteiros, string vazia para strings, etc.).

int bobScore = scores["Bob"]; // Cria "Bob" com o valor 0

Este recurso de criação automática torna o operador [] muito conveniente tanto para a leitura quanto para a escrita de dados de mapa, pois você não precisa verificar se uma chave existe antes de usá-la.

Você também pode iterar por todos os pares chave-valor em um mapa usando um loop for baseado em intervalo. Cada elemento no mapa é um par, onde pair.first contém a chave e pair.second contém o valor:

for (auto pair : scores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

Isso imprimirá cada par chave-valor armazenado no mapa, um por linha.

challenge icon

Desafio

Fácil

Crie um programa que gerencie um sistema de inventário de produtos usando um std::map. Seu programa rastreará nomes de produtos e suas quantidades atuais em estoque, permitindo que você acesse e atualize os níveis de inventário.

As seguintes entradas serão fornecidas:

  • Um número inteiro n representando a quantidade de produtos iniciais
  • Em seguida, n pares de entradas:
    • Uma string representando o nome do produto
    • Um número inteiro representando a quantidade inicial em estoque
  • Uma string representando o nome de um produto para atualizar
  • Um número inteiro representando a nova quantidade em estoque para esse produto

Seu programa deve:

  1. Criar um std::map<std::string, int> chamado inventory
  2. Ler o número de produtos iniciais
  3. Para cada produto, ler o nome e a quantidade em estoque, e então adicioná-los ao mapa usando a notação de colchetes
  4. Imprimir o inventário inicial no formato mostrado abaixo
  5. Ler o nome do produto e a nova quantidade para atualizar
  6. Usar o operador de colchetes para atualizar a quantidade em estoque do produto especificado
  7. Imprimir o inventário atualizado mostrando o nível de estoque modificado

Use o seguinte formato de saída exato:

Initial Inventory:
[product1]: [quantity1]
[product2]: [quantity2]
[product3]: [quantity3]
...
Updated Inventory:
[product1]: [quantity1]
[product2]: [updated_quantity2]
[product3]: [quantity3]
...

Os produtos devem ser impressos na ordem em que aparecem ao iterar pelo mapa (ordem alfabética pelo nome do produto). Use um loop for baseado em intervalo (range-based for loop) para iterar pelo mapa em ambas as vezes, acessando cada par chave-valor com pair.first para o nome do produto e pair.second para a quantidade. Se o nome do produto a ser atualizado não existir no mapa, o operador de colchetes criará automaticamente uma nova entrada com esse nome e a quantidade especificada.

Folha de consulta

Use o operador de colchetes [] para acessar e modificar valores de um mapa:

std::map<std::string, int> scores;
scores["Alice"] = 95;           // Set value
int aliceScore = scores["Alice"]; // Get value
scores["Alice"] = 98;           // Update value

Se você usar [] com uma chave que não existe, ele cria automaticamente um novo elemento com um valor padrão:

int bobScore = scores["Bob"]; // Creates "Bob" with value 0

Use um loop for baseado em intervalo (range-based) para iterar por todos os pares chave-valor. Cada par possui .first para a chave e .second para o valor:

for (auto pair : scores) {
    // pair.first  = key (e.g. "Alice")
    // pair.second = value (e.g. 98)
}

Experimente você mesmo

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    // Ler o número de produtos iniciais
    int n;
    cin >> n;
    
    // Criar o mapa de inventário
    map<string, int> inventory;
    
    // Ler produtos iniciais e quantidades
    for (int i = 0; i < n; i++) {
        string product;
        int quantity;
        cin >> product >> quantity;
        // TODO: Adicionar o produto ao mapa de inventário
    }
    
    // TODO: Imprimir o inventário inicial
    
    // Ler produto para atualizar e nova quantidade
    string updateProduct;
    int newQuantity;
    cin >> updateProduct >> newQuantity;
    
    // TODO: Atualizar a quantidade do produto no mapa
    
    // TODO: Imprimir o inventário atualizado
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo