Menu
Coddy logo textTech

Ü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.

challenge icon

Aufgabe

Einfach

Erstellen 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 n Paare von Eingaben:
    • Ein String, der den Namen des Gerichts darstellt
    • Ein Double, der den Preis des Gerichts darstellt

Ihr Programm sollte:

  1. Eine std::map<std::string, double> namens menu erstellen
  2. Die Anzahl der Menüpunkte einlesen
  3. Für jeden Menüpunkt den Namen des Gerichts und den Preis einlesen und diese dann mit der eckigen Klammerschreibweise zur Map hinzufügen
  4. Eine bereichsbasierte for-Schleife (range-based for loop) verwenden, um die gesamte Map zu durchlaufen und jedes Gericht mit seinem Preis auszugeben
  5. 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;
}
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