Menu
Coddy logo textTech

Удаление пар

Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 27 из 56.

Иногда вам нужно удалять пары «ключ-значение» из вашей карты, когда они больше не нужны. Метод .erase() предоставляет простой способ удаления элементов путем указания ключа, который вы хотите удалить.

Чтобы удалить элемент из map, просто вызовите .erase() с ключом в качестве аргумента:

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

scores.erase("Bob"); // Полностью удаляет запись Bob

После вызова erase("Bob") карта будет содержать только оценки Алисы и Кэрол. Если вы попытаетесь удалить ключ, которого нет в карте, операция просто ничего не сделает — ошибка не возникнет.

Этот метод особенно полезен для поддержания чистоты структур данных, удаления устаревшей информации или реализации функций, позволяющих пользователям удалять записи из вашего приложения.

challenge icon

Задание

Легко

Создайте программу, которая управляет справочником контактов с использованием std::map. Ваша программа будет хранить имена контактов и номера телефонов, а затем позволит пользователям удалять определенные контакты из справочника с помощью метода .erase().

Будут предоставлены следующие входные данные:

  • Целое число n, представляющее количество начальных контактов
  • Затем n пар входных данных:
    • Строка, представляющая имя контакта
    • Строка, представляющая номер телефона
  • Целое число m, представляющее количество контактов для удаления
  • Затем m строк, представляющих имена контактов для удаления

Ваша программа должна:

  1. Создать std::map<std::string, std::string> с именем contacts
  2. Прочитать количество начальных контактов и заполнить карту именами контактов и номерами телефонов
  3. Вывести начальный справочник контактов в формате, указанном ниже
  4. Прочитать количество контактов для удаления
  5. Для каждого имени контакта, который нужно удалить, использовать метод .erase(), чтобы удалить его из карты
  6. Вывести обновленный справочник контактов после всех удалений

Используйте следующий точный формат вывода:

Начальный справочник:

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

Обновленный справочник после удалений:

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

Если после всех удалений справочник станет пустым, выведите:

Updated Contact Directory:
Directory is empty

Контакты должны выводиться в том порядке, в котором они появляются при итерации по карте (в алфавитном порядке по имени контакта). Используйте цикл for на основе диапазона (range-based for loop) для итерации по карте в обоих случаях, обращаясь к каждой паре ключ-значение с помощью pair.first для имени контакта и pair.second для номера телефона. Помните, что попытка удалить несуществующий контакт не вызовет ошибки — карта просто останется без изменений.

Шпаргалка

Чтобы удалить элементы из map, используйте метод .erase() с ключом:

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

scores.erase("Bob"); // Полностью удаляет запись Боба

Если ключ не существует, .erase() ничего не делает, и ошибка не возникает.

Попробуйте сами

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

int main() {
    // Считать количество начальных контактов
    int n;
    cin >> n;
    
    // Создать карту контактов
    map<string, string> contacts;
    
    // Считать начальные контакты
    for (int i = 0; i < n; i++) {
        string name, phone;
        cin >> name >> phone;
        // TODO: Добавить контакт в карту
    }
    
    // Вывести начальный справочник
    cout << "Initial Contact Directory:" << endl;
    // TODO: Вывести все контакты, используя цикл for на основе диапазона
    
    // Считать количество контактов для удаления
    int m;
    cin >> m;
    
    // Удалить контакты
    for (int i = 0; i < m; i++) {
        string nameToRemove;
        cin >> nameToRemove;
        // TODO: Удалить контакт, используя метод .erase()
    }
    
    // Вывести обновленный справочник
    cout << "Updated Contact Directory:" << endl;
    // TODO: Вывести оставшиеся контакты или "Directory is empty", если справочник пуст
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком