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 map cuando ya no los necesitas. El método .erase() proporciona una forma sencilla de borrar elementos especificando la clave que quieres eliminar.

Para eliminar un elemento de un map, 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 completamente

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 se produce ningún error.

Al iterar sobre un map con un bucle for basado en range, cada elemento es un std::pair que contiene la clave y el valor. Puedes acceder a la clave con .first y al valor con .second:

for (auto pair : scores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

Esto imprimirá cada nombre y puntuación en orden alfabético, ya que std::map mantiene sus claves ordenadas automáticamente.

Este método es particularmente útil para mantener estructuras de datos limpias, eliminar información obsoleta o implementar funciones que permitan a los usuarios borrar entradas de tu aplicación.

challenge icon

Desafío

Fácil

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

Se proporcionarán las siguientes entradas:

  • Un entero n que representa el número de contactos iniciales
  • Después, 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 que se eliminarán
  • Después, m cadenas que representan los nombres de los contactos que se eliminarán

Tu programa debe:

  1. Crear un std::map<std::string, std::string> llamado contacts
  2. Leer el número de contactos iniciales y llenar el mapa con los nombres de los contactos y sus 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 que se eliminarán
  5. Para cada nombre de contacto que se eliminará, usar el método .erase() para eliminarlo del mapa
  6. Imprimir el directorio de contactos actualizado después de todas las eliminaciones

Usa el siguiente formato de salida exacto:

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 por el mapa (orden alfabético por nombre de contacto). Usa un bucle for basado en rangos para iterar por el mapa en ambas ocasiones, accediendo a cada par clave-valor con pair.first para obtener el nombre del contacto y con pair.second para obtener el número de teléfono. Recuerda que intentar eliminar un contacto que no existe no provocará un error: el mapa simplemente permanecerá sin cambios.

Pruébalo tú mismo

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

int main() {
    // Read number of initial contacts
    int n;
    cin >> n;
    
    // Crear el mapa de contactos
    map<string, string> contacts;
    
    // Read initial contacts
    for (int i = 0; i < n; i++) {
        string name, phone;
        cin >> name >> phone;
        // TODO: Añadir contacto al mapa
    }
    
    // Imprimir directorio inicial
    cout << "Initial Contact Directory:" << endl;
    // TODO: Imprimir todos los contactos usando bucle for basado en rango
    
    // 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 contacto usando el método .erase()
    }
    
    // Imprimir directorio actualizado
    cout << "Updated Contact Directory:" << endl;
    // TODO: Print remaining contacts or "Directory is empty" if empty
    
    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

Practica por tu cuenta: Compilador de C++ online