Menu
Coddy logo textTech

מעבר על מפה

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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 קובעת באופן אוטומטי את הסוג הנכון עבור כל זוג, וכך הקוד שלך נקי וקל יותר לקריאה.

challenge icon

אתגר

קל

צרו תוכנית שמנהלת מערכת תפריט למסעדה באמצעות std::map. התוכנית שלכם תשמור את פריטי התפריט ואת מחיריהם, ואז תציג את התפריט המלא באמצעות מעבר על כל זוגות המפתח-ערך.

הקלטים הבאים יסופקו:

  • מספר שלם n שמייצג את מספר פריטי התפריט
  • לאחר מכן n זוגות של קלטים:
    • מחרוזת שמייצגת את שם המנה
    • מספר ממשי מסוג double שמייצג את מחיר המנה

התוכנית שלכם צריכה:

  1. ליצור std::map<std::string, double> בשם menu
  2. לקרוא את מספר פריטי התפריט
  3. עבור כל פריט בתפריט, לקרוא את שם המנה ואת המחיר, ואז להוסיף אותם למפה באמצעות תחביר הסוגריים המרובעים
  4. להשתמש בלולאת for מבוססת טווח כדי לעבור על המפה כולה ולהדפיס כל מנה עם מחירה
  5. לחשב ולהדפיס את המספר הכולל של הפריטים בתפריט

השתמשו בפורמט הפלט המדויק הבא:

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;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C++ אונליין