Menu
Coddy logo textTech

Iterando sobre um Mapa

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

Agora que você sabe como criar, modificar e remover elementos de um mapa, vamos aprender como percorrer todos os pares chave-valor em seu mapa. O loop for baseado em intervalo (range-based for loop) fornece uma maneira elegante de iterar por cada elemento em um std::map.

Aqui está a sintaxe básica para iterar sobre um mapa:

for (auto pair : myMap) {
    // Acesse a chave com pair.first
    // Acesse o valor com pair.second
}

Cada elemento no loop é um objeto pair que contém dois membros importantes: first armazena a chave, e second armazena o valor. Aqui está um exemplo prático:

std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;

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

Isso imprimirá o nome de cada aluno seguido por sua pontuação. A palavra-chave auto determina automaticamente o tipo correto para cada par, tornando seu código mais limpo e fácil de ler.

challenge icon

Desafio

Fácil

Crie um programa que gerencie um sistema de menu de restaurante usando um std::map. Seu programa armazenará itens do menu e seus preços, e então exibirá o menu completo iterando por todos os pares chave-valor.

As seguintes entradas serão fornecidas:

  • Um número inteiro n representando o número de itens do menu
  • Em seguida, n pares de entradas:
    • Uma string representando o nome do prato
    • Um double representando o preço do prato

Seu programa deve:

  1. Criar um std::map<std::string, double> chamado menu
  2. Ler o número de itens do menu
  3. Para cada item do menu, ler o nome do prato e o preço, e então adicioná-los ao mapa usando a notação de colchetes
  4. Usar um loop for baseado em intervalo (range-based for loop) para iterar por todo o mapa e imprimir cada prato com seu preço
  5. Calcular e imprimir o número total de itens no menu

Use o seguinte formato de saída exato:

Restaurant Menu:
[dish1]: $[price1]
[dish2]: $[price2]
[dish3]: $[price3]
...
Total menu items: [number of items]

Os itens do menu devem ser impressos na ordem em que aparecem ao iterar pelo mapa (ordem alfabética pelo nome do prato). Use um loop for baseado em intervalo com auto pair : menu para iterar pelo mapa, acessando cada par chave-valor com pair.first para o nome do prato e pair.second para o preço. Imprima cada preço com exatamente 2 casas decimais usando std::fixed e std::setprecision(2).

Folha de consulta

Use um loop for baseado em intervalo (range-based for loop) para iterar por todos os pares chave-valor em um std::map:

for (auto pair : myMap) {
    // Acesse a chave com pair.first
    // Acesse o valor com pair.second
}

Cada elemento é um objeto pair onde first contém a chave e second contém o valor:

std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;

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

A palavra-chave auto determina automaticamente o tipo correto para cada par.

Experimente você mesmo

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

int main() {
    // Lê o número de itens do menu
    int n;
    cin >> n;
    
    // Cria o mapa do menu
    map<string, double> menu;
    
    // Lê os itens do menu e os preços
    for (int i = 0; i < n; i++) {
        string dish;
        double price;
        cin >> dish >> price;
        // TODO: Adicionar o prato e o preço ao mapa do menu
    }
    
    // TODO: Imprimir o cabeçalho "Restaurant Menu:"
    
    // TODO: Usar um loop for baseado em intervalo para iterar pelo menu e imprimir cada item
    // Formato: [dish]: $[price] com 2 casas decimais
    
    // TODO: Imprimir o número total de itens do menu
    
    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