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.
Aufgabe
EinfachErstellen 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
nPaare 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
mStrings, die die zu suchenden Buchtitel darstellen
Ihr Programm sollte:
- Eine
std::map<std::string, int>namenslibraryerstellen - Die Anzahl der Bücher einlesen und die Map mit Buchtiteln und deren verfügbaren Exemplaren füllen
- Die Anzahl der Buchanfragen einlesen
- Für jede Buchanfrage die Methode
.count()verwenden, um zu prüfen, ob das Buch in der Bibliothek existiert - 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;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung4Maps (Schlüssel-Wert-Paare)
Einführung in std::mapErstellen einer MapWerte abrufen und ändernAuf Schlüssel prüfenPaare entfernenÜber eine Map iterierenZusammenfassung – Wortfrequenz2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügen