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 completoDespué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.
Desafío
FácilCrea 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
nque representa el número de contactos iniciales - Luego
npares de entradas:- Una cadena que representa el nombre del contacto
- Una cadena que representa el número de teléfono
- Un entero
mque representa el número de contactos a eliminar - Luego
mcadenas que representan los nombres de los contactos a eliminar
Tu programa debe:
- Crear un
std::map<std::string, std::string>llamadocontacts - Leer el número de contactos iniciales y poblar el mapa con los nombres de contacto y números de teléfono
- Imprimir el directorio de contactos inicial en el formato que se muestra a continuación
- Leer el número de contactos a eliminar
- Para cada nombre de contacto a eliminar, utiliza el método
.erase()para eliminarlo del mapa - 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 emptyLos 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 completoSi 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;
}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
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros4Mapas (Pares Clave-Valor)
Introducción a std::mapCrear un MapaAcceder y Modificar ValoresComprobar ClavesEliminar ParesIterar sobre un MapaResumen - Frecuencia de Palabras2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tarea