Menu
Coddy logo textTech

Eliminar Pares

Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 27 de 56.

A veces necesitas eliminar pares clave-valor de tu mapa cuando ya no son necesarios. El método .erase() proporciona una forma sencilla de eliminar elementos especificando la clave que deseas eliminar.

Para eliminar un elemento de un mapa, simplemente llama a .erase() con la clave como argumento:

std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;

scores.erase("Bob"); // Elimina la entrada de Bob por completo

Después de llamar a erase("Bob"), el mapa solo contendrá las puntuaciones de Alice y Carol. Si intentas borrar una clave que no existe en el mapa, la operación simplemente no hace nada; no ocurre ningún error.

Este método es particularmente útil para mantener estructuras de datos limpias, eliminar información desactualizada o implementar funciones donde los usuarios puedan eliminar entradas de su aplicación.

challenge icon

Desafío

Fácil

Crea un programa que gestione un directorio de contactos utilizando un std::map. Tu programa almacenará nombres de contacto y números de teléfono, y luego permitirá a los usuarios eliminar contactos específicos del directorio utilizando el método .erase().

Se proporcionarán las siguientes entradas:

  • Un entero n que representa el número de contactos iniciales
  • Luego n pares de entradas:
    • Una cadena que representa el nombre del contacto
    • Una cadena que representa el número de teléfono
  • Un entero m que representa el número de contactos a eliminar
  • Luego m cadenas que representan los nombres de los contactos a eliminar

Tu programa debe:

  1. Crear un std::map<std::string, std::string> llamado contacts
  2. Leer el número de contactos iniciales y poblar el mapa con los nombres de contacto y números de teléfono
  3. Imprimir el directorio de contactos inicial en el formato que se muestra a continuación
  4. Leer el número de contactos a eliminar
  5. Para cada nombre de contacto a eliminar, utiliza el método .erase() para eliminarlo del mapa
  6. Imprimir el directorio de contactos actualizado después de todas las eliminaciones

Utiliza exactamente el siguiente formato de salida:

Directorio inicial:

Initial Contact Directory:
[contact1]: [phone1]
[contact2]: [phone2]
[contact3]: [phone3]
...

Directorio actualizado después de las eliminaciones:

Updated Contact Directory:
[remaining_contact1]: [phone1]
[remaining_contact2]: [phone2]
...

Si el directorio queda vacío después de todas las eliminaciones, imprime:

Updated Contact Directory:
Directory is empty

Los contactos deben imprimirse en el orden en que aparecen al iterar a través del mapa (orden alfabético por nombre de contacto). Utiliza un bucle for basado en rangos para iterar a través del mapa en ambas ocasiones, accediendo a cada par clave-valor con pair.first para el nombre del contacto y pair.second para el número de teléfono. Recuerda que intentar eliminar un contacto que no existe no causará un error; el mapa simplemente permanecerá sin cambios.

Hoja de referencia

Para eliminar elementos de un mapa, utiliza el método .erase() con la clave:

std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;

scores.erase("Bob"); // Elimina la entrada de Bob por completo

Si la clave no existe, .erase() no hace nada y no ocurre ningún error.

Pruébalo tú mismo

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

int main() {
    // Leer el número de contactos iniciales
    int n;
    cin >> n;
    
    // Crear el mapa de contactos
    map<string, string> contacts;
    
    // Leer los contactos iniciales
    for (int i = 0; i < n; i++) {
        string name, phone;
        cin >> name >> phone;
        // TODO: Agregar el contacto al mapa
    }
    
    // Imprimir el directorio inicial
    cout << "Initial Contact Directory:" << endl;
    // TODO: Imprimir todos los contactos usando un bucle for basado en rangos
    
    // Leer el número de contactos a eliminar
    int m;
    cin >> m;
    
    // Eliminar contactos
    for (int i = 0; i < m; i++) {
        string nameToRemove;
        cin >> nameToRemove;
        // TODO: Eliminar el contacto usando el método .erase()
    }
    
    // Imprimir el directorio actualizado
    cout << "Updated Contact Directory:" << endl;
    // TODO: Imprimir los contactos restantes o "Directory is empty" si está vacío
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo