Verificando Chaves
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 26 de 56.
Embora o operador de colchetes seja conveniente para acessar valores de mapas, existe um problema potencial: o que acontece se você tentar acessar uma chave que não existe? Como você aprendeu na lição anterior, usar [] com uma chave inexistente cria automaticamente essa chave com um valor padrão.
Às vezes, você deseja verificar se uma chave existe antes de acessá-la, sem criar novas entradas acidentalmente. É aqui que o método .count() se torna útil. Ele informa se uma chave específica está presente no mapa.
O método .count() retorna 1 se a chave existir e 0 se não existir:
std::map<std::string, int> scores;
scores["Alice"] = 95;
if (scores.count("Alice")) {
std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
std::cout << "Alice not found" << std::endl;
}Esta abordagem permite que você verifique com segurança a existência de uma chave e lide com ambos os casos adequadamente, evitando que entradas indesejadas sejam criadas em seu mapa.
Desafio
FácilCrie um programa que gerencie um sistema de empréstimo de livros de uma biblioteca usando um std::map. Seu programa rastreará quais livros estão disponíveis e usará o método .count() para verificar com segurança se os livros existem antes de tentar acessar suas informações.
As seguintes entradas serão fornecidas:
- Um número inteiro
nrepresentando o número de livros na biblioteca - Em seguida,
npares de entradas:- Uma string representando o título do livro
- Um número inteiro representando o número de cópias disponíveis
- Um número inteiro
mrepresentando o número de solicitações de livros para verificar - Em seguida,
mstrings representando os títulos dos livros a serem pesquisados
Seu programa deve:
- Criar um
std::map<std::string, int>chamadolibrary - Ler o número de livros e preencher o mapa com os títulos dos livros e suas cópias disponíveis
- Ler o número de solicitações de livros
- Para cada solicitação de livro, usar o método
.count()para verificar se o livro existe na biblioteca - Imprimir a mensagem apropriada com base no fato de o livro ter sido encontrado ou não
Use o seguinte formato de saída exato:
Para cada solicitação de livro:
- Se o livro existir:
Book "[book title]" is available with [number] copies - Se o livro não existir:
Book "[book title]" is not available in the library
Use o método .count() em uma instrução if para verificar a existência do livro antes de acessar seu valor. Se library.count(bookTitle) retornar 1, o livro existe e você pode acessar com segurança library[bookTitle] para obter o número de cópias. Se retornar 0, o livro não existe na biblioteca.
Folha de consulta
O método .count() verifica se uma chave existe em um mapa sem criar novas entradas. Ele retorna 1 se a chave existir e 0 caso contrário:
std::map<std::string, int> scores;
scores["Alice"] = 95;
if (scores.count("Alice")) {
std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
std::cout << "Alice not found" << std::endl;
}Isso evita a criação acidental de entradas indesejadas ao verificar a existência de uma chave, ao contrário do uso do operador de colchetes [], que cria chaves automaticamente com valores padrão.
Experimente você mesmo
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Ler o número de livros
int n;
cin >> n;
// Criar o mapa da biblioteca
map<string, int> library;
// Ler as informações dos livros e preencher o mapa
for (int i = 0; i < n; i++) {
string title;
int copies;
cin >> title >> copies;
library[title] = copies;
}
// Ler o número de solicitações de livros
int m;
cin >> m;
// TODO: Escreva seu código abaixo
// Processar cada solicitação de livro usando o método .count()
// Verificar se o livro existe e imprimir a mensagem apropriada
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