Iterowanie po mapie
Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 28 z 56.
Skoro wiesz już, jak tworzyć, modyfikować i usuwać elementy z mapy, nauczmy się przechodzić przez wszystkie pary klucz-wartość w mapie. Pętla for oparta na zakresie pozwala w elegancki sposób iterować po każdym elemencie w std::map.
Oto podstawowa składnia iterowania po mapie:
for (auto pair : myMap) {
// Uzyskaj dostęp do klucza za pomocą pair.first
// Uzyskaj dostęp do wartości za pomocą pair.second
}Każdy element pętli jest obiektem pary, który zawiera dwóch ważnych składowych: first przechowuje klucz, a second przechowuje wartość. Oto praktyczny przykład:
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;
}Spowoduje to wyświetlenie imienia i nazwiska każdego ucznia, a następnie jego wyniku. Słowo kluczowe auto automatycznie określa właściwy typ dla każdej pary, dzięki czemu kod jest czytelniejszy i łatwiejszy do zrozumienia.
Wyzwanie
ŁatwyUtwórz program, który zarządza systemem menu restauracji za pomocą std::map. Program będzie przechowywać pozycje menu i ich ceny, a następnie wyświetli całe menu, iterując przez wszystkie pary klucz-wartość.
Podane zostaną następujące dane wejściowe:
- Liczba całkowita
nreprezentująca liczbę pozycji menu - Następnie
npar danych wejściowych:- Ciąg znaków reprezentujący nazwę dania
- Liczba typu double reprezentująca cenę dania
Program powinien:
- Utworzyć obiekt
std::map<std::string, double>o nazwiemenu - Odczytać liczbę pozycji menu
- Dla każdej pozycji menu odczytać nazwę dania i cenę, a następnie dodać je do mapy, używając notacji nawiasów kwadratowych
- Użyć pętli for opartej na zakresie, aby przejść przez całą mapę i wypisać każde danie wraz z jego ceną
- Obliczyć i wypisać łączną liczbę pozycji w menu
Użyj następującego dokładnego formatu wyjściowego:
Restaurant Menu:
[dish1]: $[price1]
[dish2]: $[price2]
[dish3]: $[price3]
...
Total menu items: [number of items]Pozycje menu powinny być wypisywane w kolejności, w jakiej pojawiają się podczas iteracji przez mapę (alfabetycznie według nazwy dania). Użyj pętli for opartej na zakresie z auto pair : menu, aby przejść przez mapę, uzyskując dostęp do każdej pary klucz-wartość za pomocą pair.first dla nazwy dania i pair.second dla ceny. Wypisz każdą cenę z dokładnie 2 miejscami po przecinku, używając std::fixed i std::setprecision(2).
Spróbuj swoich sił
#include <iostream>
#include <map>
#include <string>
#include <iomanip>
using namespace std;
int main() {
// Wczytaj liczbę pozycji w menu
int n;
cin >> n;
// Utwórz mapę menu
map<string, double> menu;
// Wczytaj pozycje menu i ich ceny
for (int i = 0; i < n; i++) {
string dish;
double price;
cin >> dish >> price;
// TODO: Dodaj danie i jego cenę do mapy menu
}
// TODO: Wypisz nagłówek "Restaurant Menu:"
// TODO: Użyj pętli for opartej na zakresie, aby przejść przez menu i wypisać każdą pozycję
// Format: [dish]: $[price] z 2 miejscami po przecinku
// TODO: Wypisz łączną liczbę pozycji w menu
return 0;
}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
1Wskaźniki i pamięć
Czym jest wskaźnik?Operator pobrania adresuOperator dereferencjiWskaźniki zeroweWskaźniki i tabliceDynamiczne zarządzanie pamięcią za pomocą „new”Zwalnianie pamięci za pomocą „delete”Podsumowanie — ćwiczenia ze wskaźnikami4Mapy (pary klucz–wartość)
Poznajemy std::mapTworzenie mapyOdczytywanie i modyfikowanie wartościSprawdzanie kluczyUsuwanie parIterowanie po mapiePodsumowanie – częstość występowania słów2Wektory (tablice dynamiczne)
Wprowadzenie do std::vectorTworzenie wektoraDodawanie elementówDostęp do elementówRozmiar wektoraIterowanie za pomocą pętli forPętla for oparta na zakresieUsuwanie elementówPodsumowanie — operacje na wektorach5Projekt: Narzędzie do zarządzania zapasami
Konfiguracja projektuDodawanie i aktualizowanie produktów3Projekt: narzędzie do listy zadań
Przegląd projektuDodawanie zadaniaPoćwicz samodzielnie: Kompilator C++ online