Menu
Coddy logo textTech

גישה לערכים ושינוים

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 25 מתוך 56.

ברגע שיש לך מפה עם זוגות מפתח-ערך, לעיתים קרובות תצטרך לאחזר או לעדכן את הערכים המאוחסנים בה. אופרטור הסוגריים המרובעים [] מספק דרך נוחה גם לגשת לערכים קיימים וגם לשנות אותם.

כדי לגשת לערך, פשוט משתמשים במפתח שבתוך סוגריים מרובעים:

std::map<std::string, int> scores;
scores["Alice"] = 95;
int aliceScore = scores["Alice"]; // מקבל 95

אותה תחביר פועל גם לעדכון ערכים קיימים:

scores["Alice"] = 98; // מעדכן את הציון של Alice ל-98

הנה התנהגות חשובה שכדאי לזכור: אם משתמשים באופרטור [] עם מפתח שאינו קיים במפה, הוא יוצר באופן אוטומטי איבר חדש עם המפתח הזה ומאתחל אותו בערך ברירת מחדל (0 עבור מספרים שלמים, מחרוזת ריקה עבור מחרוזות וכו׳).

int bobScore = scores["Bob"]; // יוצר את "Bob" עם הערך 0

תכונת היצירה האוטומטית הזו הופכת את האופרטור [] לנוח מאוד לקריאה ולכתיבה של נתוני מפה, כי אין צורך לבדוק אם מפתח קיים לפני שמשתמשים בו.

אפשר גם לעבור על כל צמדי המפתח-ערך במפה באמצעות לולאת for המבוססת על טווח. כל איבר במפה הוא צמד, שבו pair.first מכיל את המפתח ו-pair.second מכיל את הערך:

for (auto pair : scores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

פעולה זו תדפיס כל צמד מפתח-ערך המאוחסן במפה, צמד אחד בכל שורה.

challenge icon

אתגר

קל

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

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

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

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

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

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

Initial Inventory:
[product1]: [quantity1]
[product2]: [quantity2]
[product3]: [quantity3]
...
Updated Inventory:
[product1]: [quantity1]
[product2]: [updated_quantity2]
[product3]: [quantity3]
...

יש להדפיס את המוצרים בסדר שבו הם מופיעים בעת מעבר על המפה (בסדר אלפביתי לפי שם המוצר). השתמש בלולאת for מבוססת טווח כדי לעבור על המפה בשתי הפעמים, וגשת לכל זוג מפתח-ערך באמצעות pair.first עבור שם המוצר ו-pair.second עבור הכמות. אם שם המוצר שיש לעדכן אינו קיים במפה, אופרטור הסוגריים המרובעים ייצור באופן אוטומטי רשומה חדשה עם השם הזה והכמות שצוינה.

נסו בעצמכם

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    // קרא את מספר המוצרים ההתחלתיים
    int n;
    cin >> n;
    
    // צור את מפת המלאי
    map<string, int> inventory;
    
    // קרא את המוצרים ההתחלתיים ואת הכמויות שלהם
    for (int i = 0; i < n; i++) {
        string product;
        int quantity;
        cin >> product >> quantity;
        // TODO: הוסף את המוצר למפת המלאי
    }
    
    // TODO: הדפס את המלאי ההתחלתי
    
    // קרא את המוצר שיש לעדכן ואת הכמות החדשה
    string updateProduct;
    int newQuantity;
    cin >> updateProduct >> newQuantity;
    
    // TODO: עדכן את כמות המוצר במפה
    
    // TODO: הדפס את המלאי המעודכן
    
    return 0;
}
quiz iconבחנו את עצמכם

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

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

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