Menu
Coddy logo textTech

Usuwanie par

Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 27 z 56.

Czasami trzeba usunąć pary klucz-wartość z mapy, gdy nie są już potrzebne. Metoda .erase() umożliwia łatwe usuwanie elementów przez podanie klucza, który chcesz usunąć.

Aby usunąć element z mapy, po prostu wywołaj .erase(), przekazując klucz jako argument:

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

scores.erase("Bob"); // Całkowicie usuwa wpis dla Bob

Po wywołaniu erase("Bob") mapa będzie zawierać tylko wyniki Alice i Carol. Jeśli spróbujesz usunąć klucz, który nie istnieje w mapie, operacja po prostu nic nie zrobi — nie wystąpi żaden błąd.

Podczas iterowania po mapie za pomocą pętli for opartej na zakresie każdy element jest obiektem std::pair zawierającym klucz i wartość. Możesz uzyskać dostęp do klucza za pomocą .first, a do wartości za pomocą .second:

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

Wypisze każdą nazwę i każdy wynik w kolejności alfabetycznej, ponieważ std::map automatycznie sortuje swoje klucze.

Ta metoda jest szczególnie przydatna do utrzymywania porządku w strukturach danych, usuwania nieaktualnych informacji lub implementowania funkcji umożliwiających użytkownikom usuwanie wpisów z aplikacji.

challenge icon

Wyzwanie

Łatwy

Utwórz program, który zarządza katalogiem kontaktów za pomocą std::map. Program będzie przechowywać imiona i nazwiska kontaktów oraz numery telefonów, a następnie umożliwi użytkownikom usuwanie wybranych kontaktów z katalogu za pomocą metody .erase().

Podane zostaną następujące dane wejściowe:

  • Liczba całkowita n oznaczająca liczbę początkowych kontaktów
  • Następnie n par danych wejściowych:
    • Ciąg znaków reprezentujący nazwę kontaktu
    • Ciąg znaków reprezentujący numer telefonu
  • Liczba całkowita m oznaczająca liczbę kontaktów do usunięcia
  • Następnie m ciągów znaków reprezentujących nazwy kontaktów do usunięcia

Twój program powinien:

  1. Utworzyć obiekt std::map<std::string, std::string> o nazwie contacts
  2. Wczytać liczbę początkowych kontaktów i wypełnić mapę nazwami kontaktów oraz numerami telefonów
  3. Wypisać początkowy katalog kontaktów w formacie pokazanym poniżej
  4. Wczytać liczbę kontaktów do usunięcia
  5. Dla każdej nazwy kontaktu do usunięcia użyć metody .erase(), aby usunąć ten kontakt z mapy
  6. Wypisać zaktualizowany katalog kontaktów po usunięciu wszystkich wskazanych kontaktów

Użyj dokładnie następującego formatu wyjściowego:

Początkowy katalog:

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

Zaktualizowany katalog po usunięciu kontaktów:

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

Jeśli katalog będzie pusty po usunięciu wszystkich wskazanych kontaktów, wypisz:

Updated Contact Directory:
Directory is empty

Kontakty należy wypisać w kolejności, w jakiej pojawiają się podczas iterowania po mapie (alfabetycznie według nazwy kontaktu). Użyj pętli for opartej na zakresie, aby dwukrotnie iterować po mapie, uzyskując dostęp do każdej pary klucz-wartość za pomocą pair.first dla nazwy kontaktu i pair.second dla numeru telefonu. Pamiętaj, że próba usunięcia nieistniejącego kontaktu nie spowoduje błędu — mapa po prostu pozostanie bez zmian.

Spróbuj swoich sił

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

int main() {
    // Wczytaj liczbę początkowych kontaktów
    int n;
    cin >> n;
    
    // Utwórz mapę kontaktów
    map<string, string> contacts;
    
    // Wczytaj początkowe kontakty
    for (int i = 0; i < n; i++) {
        string name, phone;
        cin >> name >> phone;
        // TODO: Dodaj kontakt do mapy
    }
    
    // Wyświetl początkową książkę telefoniczną
    cout << "Initial Contact Directory:" << endl;
    // TODO: Wyświetl wszystkie kontakty, używając pętli for opartej na zakresie
    
    // Wczytaj liczbę kontaktów do usunięcia
    int m;
    cin >> m;
    
    // Usuń kontakty
    for (int i = 0; i < m; i++) {
        string nameToRemove;
        cin >> nameToRemove;
        // TODO: Usuń kontakt za pomocą metody .erase()
    }
    
    // Wyświetl zaktualizowaną książkę telefoniczną
    cout << "Updated Contact Directory:" << endl;
    // TODO: Wyświetl pozostałe kontakty lub "Directory is empty", jeśli lista jest pusta
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator C++ online