Removendo Pares
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 27 de 56.
Às vezes, você precisa remover pares chave-valor do seu mapa quando eles não são mais necessários. O método .erase() fornece uma maneira direta de excluir elementos especificando a chave que você deseja remover.
Para remover um elemento de um mapa, basta chamar .erase() com a chave como argumento:
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;
scores.erase("Bob"); // Remove a entrada de Bob completamenteApós chamar erase("Bob"), o mapa conterá apenas as pontuações de Alice e Carol. Se você tentar apagar uma chave que não existe no mapa, a operação simplesmente não faz nada - nenhum erro ocorre.
Este método é particularmente útil para manter estruturas de dados limpas, remover informações desatualizadas ou implementar recursos onde os usuários podem excluir entradas do seu aplicativo.
Desafio
FácilCrie um programa que gerencie um diretório de contatos usando um std::map. Seu programa armazenará nomes de contatos e números de telefone, e então permitirá que os usuários removam contatos específicos do diretório usando o método .erase().
As seguintes entradas serão fornecidas:
- Um número inteiro
nrepresentando o número de contatos iniciais - Em seguida,
npares de entradas:- Uma string representando o nome do contato
- Uma string representando o número de telefone
- Um número inteiro
mrepresentando o número de contatos a serem removidos - Em seguida,
mstrings representando os nomes dos contatos a serem removidos
Seu programa deve:
- Criar um
std::map<std::string, std::string>chamadocontacts - Ler o número de contatos iniciais e preencher o mapa com nomes de contatos e números de telefone
- Imprimir o diretório de contatos inicial no formato mostrado abaixo
- Ler o número de contatos a serem removidos
- Para cada nome de contato a ser removido, use o método
.erase()para removê-lo do mapa - Imprimir o diretório de contatos atualizado após todas as remoções
Use o seguinte formato de saída exato:
Diretório inicial:
Initial Contact Directory:
[contact1]: [phone1]
[contact2]: [phone2]
[contact3]: [phone3]
...Diretório atualizado após as remoções:
Updated Contact Directory:
[remaining_contact1]: [phone1]
[remaining_contact2]: [phone2]
...Se o diretório ficar vazio após todas as remoções, imprima:
Updated Contact Directory:
Directory is emptyOs contatos devem ser impressos na ordem em que aparecem ao iterar pelo mapa (ordem alfabética pelo nome do contato). 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 contato e pair.second para o número de telefone. Lembre-se de que tentar apagar um contato que não existe não causará erro - o mapa simplesmente permanecerá inalterado.
Folha de consulta
Para remover elementos de um mapa, use o método .erase() com a chave:
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores.erase("Bob"); // Remove a entrada de Bob completamenteSe a chave não existir, o .erase() não faz nada e nenhum erro ocorre.
Experimente você mesmo
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Ler o número de contatos iniciais
int n;
cin >> n;
// Criar o mapa de contatos
map<string, string> contacts;
// Ler contatos iniciais
for (int i = 0; i < n; i++) {
string name, phone;
cin >> name >> phone;
// TODO: Adicionar contato ao mapa
}
// Imprimir diretório inicial
cout << "Initial Contact Directory:" << endl;
// TODO: Imprimir todos os contatos usando um loop for baseado em intervalo (range-based)
// Ler o número de contatos a remover
int m;
cin >> m;
// Remover contatos
for (int i = 0; i < m; i++) {
string nameToRemove;
cin >> nameToRemove;
// TODO: Remover contato usando o método .erase()
}
// Imprimir diretório atualizado
cout << "Updated Contact Directory:" << endl;
// TODO: Imprimir os contatos restantes ou "Directory is empty" se estiver vazio
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