Acessando e Modificando Valores
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 25 de 56.
Depois de ter 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 95A mesma sintaxe funciona para atualizar valores existentes:
scores["Alice"] = 98; // Atualiza a pontuação de Alice para 98Aqui está um comportamento importante para lembrar: 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 0Este 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 (range-based). Cada elemento no mapa é um pair, 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.
Desafio
FácilCrie 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
nrepresentando o número de produtos iniciais - Em seguida,
npares 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:
- Criar um
std::map<std::string, int>chamadoinventory - Ler o número de produtos iniciais
- Para cada produto, ler o nome e a quantidade em estoque, e então adicioná-los ao mapa usando a notação de colchetes
- Imprimir o inventário inicial no formato mostrado abaixo
- Ler o nome do produto e a nova quantidade para atualizar
- Usar o operador de colchetes para atualizar a quantidade em estoque do produto especificado
- 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.
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 os produtos iniciais e as 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 o produto para atualizar e a 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;
}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
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros4Mapas (Pares Chave-Valor)
Introdução ao std::mapCriando um MapaAcessando e Modificando ValoresVerificando ChavesRemovendo ParesIterando sobre um MapaRecapitulação - Frequência de Palavras2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa