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.
Desafio
FácilCrie 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
nrepresentando o número de alunos - Em seguida,
npares de entradas:- Uma string representando o nome do aluno
- Um número inteiro representando a pontuação do aluno
Seu programa deve:
- Criar um
std::map<std::string, int>chamadogrades - Ler o número de alunos
- Para cada aluno, ler seu nome e pontuação, e então adicioná-los ao mapa usando a notação de colchetes
- Após adicionar todos os alunos, imprimir as informações de cada aluno no formato mostrado abaixo
- 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;
}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