Menu
Coddy logo textTech

Criando um Mapa

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

Agora que você entende o que é um mapa, vamos aprender como criar um e adicionar pares chave-valor a ele. Ao declarar um std::map, você precisa especificar tanto o tipo da chave quanto o tipo do valor usando colchetes angulares.

Aqui está a sintaxe básica para criar um map:

std::map<KeyType, ValueType> mapName;

Por exemplo, para criar um mapa que armazena nomes de alunos como chaves e suas notas de testes como valores:

std::map<std::string, int> studentScores;

Para adicionar elementos ao seu mapa, você pode usar a notação de colchetes com a chave e, em seguida, atribuir um valor:

studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;

Isso cria três pares chave-valor no mapa. O nome de cada aluno serve como a chave que permite recuperar rapidamente a pontuação correspondente.

Para iterar sobre todas as entradas em um mapa, use um loop for baseado em intervalo (range-based for loop) com auto. Cada elemento em um std::map é um par chave-valor, então você acessa a chave com .first e o valor com .second:

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

Aqui, auto deduz automaticamente o tipo de cada elemento, pair.first fornece a chave (nome do aluno) e pair.second fornece o valor (nota). Observe que o std::map sempre itera em ordem classificada pela chave.

challenge icon

Desafio

Fácil

Crie um programa que construa um sistema de acompanhamento de notas de alunos usando um std::map. Seu programa armazenará os nomes dos alunos como chaves e suas pontuações nos testes como valores.

As seguintes entradas serão fornecidas:

  • Um número inteiro n representando o número de alunos
  • Em seguida, n pares de entradas:
    • Uma string representando o nome do aluno
    • Um número inteiro representando a pontuação do aluno

Seu programa deve:

  1. Criar um std::map<std::string, int> chamado grades
  2. Ler o número de alunos
  3. Para cada aluno, ler seu nome e pontuação, e então adicioná-los ao mapa usando a notação de colchetes
  4. Após adicionar todos os alunos, imprimir as informações de cada aluno no formato mostrado abaixo
  5. Calcular e imprimir o número total de alunos armazenados no mapa

Use o seguinte formato de saída exato:

Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]

Os alunos devem ser impressos na ordem em que aparecem ao iterar pelo mapa (que será a ordem alfabética, já que os mapas ordenam automaticamente pela chave). Use um loop for baseado em intervalo (range-based for loop) para iterar pelo mapa, acessando cada par chave-valor e imprimindo o nome do aluno seguido por sua pontuação.

Folha de consulta

Para criar um std::map, especifique os tipos de chave e valor entre colchetes angulares:

std::map<KeyType, ValueType> mapName;

Exemplo com chaves de string e valores inteiros:

std::map<std::string, int> studentScores;

Adicione elementos usando a notação de colchetes:

studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;

Itere sobre um mapa usando um loop for baseado em intervalo. Cada elemento é um par — use .first para acessar a chave e .second para acessar o valor:

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

auto deduz automaticamente o tipo de cada elemento, e const auto& evita cópias desnecessárias.

Experimente você mesmo

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

int main() {
    // Lê o número de alunos
    int n;
    cin >> n;
    
    // Cria o mapa para armazenar as notas
    map<string, int> grades;
    
    // TODO: Escreva seu código aqui
    // Lê o nome e a nota de cada aluno e, em seguida, adiciona ao mapa
    
    
    // Imprime os resultados
    cout << "Student Grades:" << endl;
    // TODO: Use um loop for baseado em intervalo para imprimir a nota de cada aluno
    
    
    // Imprime o número total de alunos
    cout << "Total students: " << grades.size() << endl;
    
    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