Menu
Coddy logo textTech

Auf Schlüssel prüfen

Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 26 von 56.

Während der eckige Klammer-Operator für den Zugriff auf Map-Werte praktisch ist, gibt es ein potenzielles Problem: Was passiert, wenn Sie versuchen, auf einen Schlüssel zuzugreifen, der nicht existiert? Wie Sie in der vorherigen Lektion gelernt haben, erzeugt die Verwendung von [] mit einem nicht existierenden Schlüssel diesen Schlüssel automatisch mit einem Standardwert.

Manchmal möchten Sie prüfen, ob ein Schlüssel existiert, bevor Sie darauf zugreifen, ohne versehentlich neue Einträge zu erstellen. Hier wird die .count()-Methode nützlich. Sie teilt Ihnen mit, ob ein bestimmter Schlüssel in der Map vorhanden ist.

Die .count()-Methode gibt 1 zurück, wenn der Schlüssel existiert, und 0, wenn nicht:

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;
}

Dieser Ansatz ermöglicht es Ihnen, sicher auf die Existenz eines Schlüssels zu prüfen und beide Fälle angemessen zu behandeln, wodurch verhindert wird, dass unerwünschte Einträge in Ihrer Map erstellt werden.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das ein Ausleihsystem für Bibliotheksbücher mit einer std::map verwaltet. Ihr Programm wird verfolgen, welche Bücher verfügbar sind, und die Methode .count() verwenden, um sicher zu prüfen, ob Bücher existieren, bevor versucht wird, auf deren Informationen zuzugreifen.

Die folgenden Eingaben werden bereitgestellt:

  • Ein Integer n, der die Anzahl der Bücher in der Bibliothek darstellt
  • Dann n Paare von Eingaben:
    • Ein String, der den Buchtitel darstellt
    • Ein Integer, der die Anzahl der verfügbaren Exemplare darstellt
  • Ein Integer m, der die Anzahl der zu prüfenden Buchanfragen darstellt
  • Dann m Strings, die die zu suchenden Buchtitel darstellen

Ihr Programm sollte:

  1. Eine std::map<std::string, int> namens library erstellen
  2. Die Anzahl der Bücher einlesen und die Map mit Buchtiteln und deren verfügbaren Exemplaren füllen
  3. Die Anzahl der Buchanfragen einlesen
  4. Für jede Buchanfrage die Methode .count() verwenden, um zu prüfen, ob das Buch in der Bibliothek existiert
  5. Die entsprechende Nachricht ausgeben, je nachdem, ob das Buch gefunden wurde oder nicht

Verwenden Sie das folgende genaue Ausgabeformat:

Für jede Buchanfrage:

  • Wenn das Buch existiert: Book "[book title]" is available with [number] copies
  • Wenn das Buch nicht existiert: Book "[book title]" is not available in the library

Verwenden Sie die Methode .count() in einer if-Anweisung, um die Existenz des Buches zu prüfen, bevor Sie auf seinen Wert zugreifen. Wenn library.count(bookTitle) den Wert 1 zurückgibt, existiert das Buch und Sie können sicher auf library[bookTitle] zugreifen, um die Anzahl der Exemplare zu erhalten. Wenn sie 0 zurückgibt, existiert das Buch nicht in der Bibliothek.

Spickzettel

Die .count() Methode prüft, ob ein Schlüssel in einer Map existiert, ohne neue Einträge zu erstellen. Sie gibt 1 zurück, wenn der Schlüssel existiert, und 0, wenn nicht:

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;
}

Dies verhindert das versehentliche Erstellen unerwünschter Einträge beim Prüfen auf die Existenz eines Schlüssels, im Gegensatz zur Verwendung des eckigen Klammer-Operators [], der automatisch Schlüssel mit Standardwerten erstellt.

Probier es selbst

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

int main() {
    // Anzahl der Bücher einlesen
    int n;
    cin >> n;
    
    // Bibliotheks-Map erstellen
    map<string, int> library;
    
    // Buchinformationen einlesen und die Map füllen
    for (int i = 0; i < n; i++) {
        string title;
        int copies;
        cin >> title >> copies;
        library[title] = copies;
    }
    
    // Anzahl der Buchanfragen einlesen
    int m;
    cin >> m;
    
    // TODO: Schreiben Sie Ihren Code unten
    // Jede Buchanfrage mit der .count() Methode verarbeiten
    // Prüfen, ob das Buch existiert, und die entsprechende Nachricht ausgeben
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf