Menu
Coddy logo textTech

Sprawdzanie kluczy

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

Chociaż operator nawiasów kwadratowych jest wygodny do uzyskiwania dostępu do wartości mapy, może pojawić się problem: co się stanie, jeśli spróbujesz uzyskać dostęp do nieistniejącego klucza? Jak dowiedziałeś się w poprzedniej lekcji, użycie [] z nieistniejącym kluczem automatycznie tworzy ten klucz z wartością domyślną.

Czasami chcesz sprawdzić, czy klucz istnieje, zanim uzyskasz do niego dostęp, nie tworząc przypadkowo nowych wpisów. Właśnie wtedy przydaje się metoda .count(). Informuje, czy określony klucz znajduje się w mapie.

Metoda .count() zwraca 1, jeśli klucz istnieje, a 0, jeśli nie istnieje:

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

if (scores.count("Alice")) {
    std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
    std::cout << "Alice not found" << std::endl;
}

To podejście pozwala bezpiecznie sprawdzić, czy klucz istnieje, i odpowiednio obsłużyć oba przypadki, zapobiegając tworzeniu niepożądanych wpisów w mapie.

challenge icon

Wyzwanie

Łatwy

Utwórz program, który zarządza systemem wypożyczania książek z biblioteki za pomocą std::map. Twój program będzie śledzić, które książki są dostępne, i używać metody .count(), aby bezpiecznie sprawdzać, czy książki istnieją, zanim spróbuje uzyskać dostęp do ich informacji.

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

  • Liczba całkowita n reprezentująca liczbę książek w bibliotece
  • Następnie n par danych wejściowych:
    • Ciąg znaków reprezentujący tytuł książki
    • Liczba całkowita reprezentująca liczbę dostępnych egzemplarzy
  • Liczba całkowita m reprezentująca liczbę zapytań o książki do sprawdzenia
  • Następnie m ciągów znaków reprezentujących tytuły książek do wyszukania

Twój program powinien:

  1. Utworzyć std::map<std::string, int> o nazwie library
  2. Wczytać liczbę książek i wypełnić mapę tytułami książek oraz liczbą dostępnych egzemplarzy
  3. Wczytać liczbę zapytań o książki
  4. Dla każdego zapytania o książkę użyć metody .count(), aby sprawdzić, czy książka istnieje w bibliotece
  5. Wypisać odpowiedni komunikat w zależności od tego, czy książka została znaleziona

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

Dla każdego zapytania o książkę:

  • Jeśli książka istnieje: Book "[book title]" is available with [number] copies
  • Jeśli książka nie istnieje: Book "[book title]" is not available in the library

Użyj metody .count() w instrukcji if, aby sprawdzić, czy książka istnieje, zanim uzyskasz dostęp do jej wartości. Jeśli library.count(bookTitle) zwróci 1, książka istnieje i możesz bezpiecznie uzyskać dostęp do library[bookTitle], aby pobrać liczbę egzemplarzy. Jeśli zwróci 0, książka nie istnieje w bibliotece.

Spróbuj swoich sił

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

int main() {
    // Wczytaj liczbę książek
    int n;
    cin >> n;
    
    // Utwórz mapę biblioteki
    map<string, int> library;
    
    // Wczytaj informacje o książkach i wypełnij mapę
    for (int i = 0; i < n; i++) {
        string title;
        int copies;
        cin >> title >> copies;
        library[title] = copies;
    }
    
    // Wczytaj liczbę zapytań o książki
    int m;
    cin >> m;
    
    // TODO: Napisz swój kod poniżej
    // Przetwórz każde zapytanie o książkę, używając metody .count()
    // Sprawdź, czy książka istnieje, i wypisz odpowiedni komunikat
    
    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