מעבר על מפה
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 28 מתוך 56.
עכשיו, אחרי שלמדת איך ליצור, לשנות ולהסיר איברים ממפה, נלמד איך לעבור על כל זוגות המפתח-ערך במפה שלך. לולאת for מבוססת טווח מספקת דרך אלגנטית לעבור על כל איבר ב-std::map.
הנה התחביר הבסיסי למעבר על מפה:
for (auto pair : myMap) {
// גש למפתח באמצעות pair.first
// גש לערך באמצעות pair.second
}כל איבר בלולאה הוא אובייקט זוג שמכיל שני איברים חשובים: first מכיל את המפתח, ו־second מכיל את הערך. הנה דוגמה מעשית:
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;
}פעולה זו תדפיס את שמו של כל תלמיד ואחריו את הציון שלו. מילת המפתח auto קובעת באופן אוטומטי את הסוג הנכון עבור כל זוג, וכך הקוד שלך נקי וקל יותר לקריאה.
אתגר
קלצרו תוכנית שמנהלת מערכת תפריט למסעדה באמצעות std::map. התוכנית שלכם תשמור את פריטי התפריט ואת מחיריהם, ואז תציג את התפריט המלא באמצעות מעבר על כל זוגות המפתח-ערך.
הקלטים הבאים יסופקו:
- מספר שלם
nשמייצג את מספר פריטי התפריט - לאחר מכן
nזוגות של קלטים:- מחרוזת שמייצגת את שם המנה
- מספר ממשי מסוג double שמייצג את מחיר המנה
התוכנית שלכם צריכה:
- ליצור
std::map<std::string, double>בשםmenu - לקרוא את מספר פריטי התפריט
- עבור כל פריט בתפריט, לקרוא את שם המנה ואת המחיר, ואז להוסיף אותם למפה באמצעות תחביר הסוגריים המרובעים
- להשתמש בלולאת for מבוססת טווח כדי לעבור על המפה כולה ולהדפיס כל מנה עם מחירה
- לחשב ולהדפיס את המספר הכולל של הפריטים בתפריט
השתמשו בפורמט הפלט המדויק הבא:
Restaurant Menu:
[dish1]: $[price1]
[dish2]: $[price2]
[dish3]: $[price3]
...
Total menu items: [number of items]יש להדפיס את פריטי התפריט בסדר שבו הם מופיעים בעת מעבר על המפה (בסדר אלפביתי לפי שם המנה). השתמשו בלולאת for מבוססת טווח עם auto pair : menu כדי לעבור על המפה, וגשתו לכל זוג מפתח-ערך באמצעות pair.first עבור שם המנה ו-pair.second עבור המחיר. הדפיסו כל מחיר בדיוק עם 2 ספרות אחרי הנקודה העשרונית באמצעות std::fixed ו-std::setprecision(2).
נסו בעצמכם
#include <iostream>
#include <map>
#include <string>
#include <iomanip>
using namespace std;
int main() {
// קראו את מספר הפריטים בתפריט
int n;
cin >> n;
// צרו את מפת התפריט
map<string, double> menu;
// קראו את פריטי התפריט ואת המחירים
for (int i = 0; i < n; i++) {
string dish;
double price;
cin >> dish >> price;
// TODO: הוסיפו את המנה ואת מחירה למפת התפריט
}
// TODO: הדפיסו את הכותרת "Restaurant Menu:"
// TODO: השתמשו בלולאת for מבוססת-טווח כדי לעבור על menu ולהדפיס כל פריט
// פורמט: [dish]: $[price] עם 2 ספרות אחרי הנקודה העשרונית
// TODO: הדפיסו את המספר הכולל של פריטי התפריט
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים4מפות (זוגות מפתח-ערך)
היכרות עם std::mapיצירת מפהגישה לערכים ושינויםבדיקה אם מפתחות קיימיםהסרת זוגותמעבר על מפהסיכום – שכיחות מילים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטיםתרגלו בעצמכם: קומפיילר C++ אונליין