Menu
Coddy logo textTech

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 completamente

Apó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.

challenge icon

Desafio

Fácil

Crie 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 n representando o número de contatos iniciais
  • Em seguida, n pares de entradas:
    • Uma string representando o nome do contato
    • Uma string representando o número de telefone
  • Um número inteiro m representando o número de contatos a serem removidos
  • Em seguida, m strings representando os nomes dos contatos a serem removidos

Seu programa deve:

  1. Criar um std::map<std::string, std::string> chamado contacts
  2. Ler o número de contatos iniciais e preencher o mapa com nomes de contatos e números de telefone
  3. Imprimir o diretório de contatos inicial no formato mostrado abaixo
  4. Ler o número de contatos a serem removidos
  5. Para cada nome de contato a ser removido, use o método .erase() para removê-lo do mapa
  6. 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 empty

Os 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 completamente

Se 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;
}
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