Über eine Map iterieren
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 28 von 56.
Nachdem Sie nun wissen, wie man Elemente in einer Map erstellt, ändert und entfernt, lernen wir nun, wie man alle Schlüssel-Wert-Paare in Ihrer Map durchläuft. Die bereichsbasierte for-Schleife bietet eine elegante Möglichkeit, jedes Element in einer std::map zu iterieren.
Hier ist die grundlegende Syntax für das Iterieren über eine Map:
for (auto pair : myMap) {
// Zugriff auf den Schlüssel mit pair.first
// Zugriff auf den Wert mit pair.second
}Jedes Element in der Schleife ist ein pair-Objekt, das zwei wichtige Member enthält: first enthält den Schlüssel und second enthält den Wert. Hier ist ein praktisches Beispiel:
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Dies gibt den Namen jedes Schülers gefolgt von seiner Punktzahl aus. Das Schlüsselwort auto bestimmt automatisch den richtigen Typ für jedes Paar, was Ihren Code sauberer und leichter lesbar macht.
Aufgabe
EinfachErstellen Sie ein Programm, das ein Restaurant-Menüsystem mit einer std::map verwaltet. Ihr Programm soll Menüpunkte und deren Preise speichern und anschließend das vollständige Menü anzeigen, indem es alle Schlüssel-Wert-Paare durchläuft.
Die folgenden Eingaben werden bereitgestellt:
- Ein Integer
n, der die Anzahl der Menüpunkte darstellt - Anschließend
nPaare von Eingaben:- Ein String, der den Namen des Gerichts darstellt
- Ein Double, der den Preis des Gerichts darstellt
Ihr Programm sollte:
- Eine
std::map<std::string, double>namensmenuerstellen - Die Anzahl der Menüpunkte einlesen
- Für jeden Menüpunkt den Namen des Gerichts und den Preis einlesen und diese dann mit der eckigen Klammerschreibweise zur Map hinzufügen
- Eine bereichsbasierte for-Schleife (range-based for loop) verwenden, um die gesamte Map zu durchlaufen und jedes Gericht mit seinem Preis auszugeben
- Die Gesamtzahl der Elemente im Menü berechnen und ausgeben
Verwenden Sie das folgende exakte Ausgabeformat:
Restaurant Menu:
[dish1]: $[price1]
[dish2]: $[price2]
[dish3]: $[price3]
...
Total menu items: [number of items]Die Menüpunkte sollten in der Reihenfolge ausgegeben werden, in der sie beim Durchlaufen der Map erscheinen (alphabetische Reihenfolge nach Gerichtsname). Verwenden Sie eine bereichsbasierte for-Schleife mit auto pair : menu, um die Map zu durchlaufen, wobei Sie auf jedes Schlüssel-Wert-Paar mit pair.first für den Gerichtsnamen und pair.second für den Preis zugreifen. Geben Sie jeden Preis mit genau 2 Dezimalstellen unter Verwendung von std::fixed und std::setprecision(2) aus.
Spickzettel
Verwenden Sie eine bereichsbasierte for-Schleife (range-based for loop), um alle Schlüssel-Wert-Paare in einer std::map zu durchlaufen:
for (auto pair : myMap) {
// Zugriff auf den Schlüssel mit pair.first
// Zugriff auf den Wert mit pair.second
}Jedes Element ist ein pair-Objekt, wobei first den Schlüssel und second den Wert enthält:
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Das Schlüsselwort auto bestimmt automatisch den richtigen Typ für jedes Paar.
Probier es selbst
#include <iostream>
#include <map>
#include <string>
#include <iomanip>
using namespace std;
int main() {
// Lies die Anzahl der Menüpunkte ein
int n;
cin >> n;
// Erstelle die Menü-Map
map<string, double> menu;
// Lies Menüpunkte und Preise ein
for (int i = 0; i < n; i++) {
string dish;
double price;
cin >> dish >> price;
// TODO: Füge das Gericht und den Preis zur Menü-Map hinzu
}
// TODO: Gib die Kopfzeile "Restaurant Menu:" aus
// TODO: Verwende eine bereichsbasierte for-Schleife, um das Menü zu durchlaufen und jeden Punkt auszugeben
// Format: [dish]: $[price] mit 2 Dezimalstellen
// TODO: Gib die Gesamtzahl der Menüpunkte aus
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