Menu
Coddy logo textTech

הסרת זוגות

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

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

כדי להסיר איבר ממפה, פשוט קראו ל־.erase() והעבירו את המפתח כארגומנט:

std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;

scores.erase("Bob"); // מסיר לחלוטין את הרשומה של Bob

לאחר קריאה ל־erase("Bob"), המפה תכיל רק את הניקוד של Alice ושל Carol. אם תנסה למחוק מפתח שאינו קיים במפה, הפעולה פשוט לא תעשה דבר - לא תתרחש שגיאה.

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

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

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

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

challenge icon

אתגר

קל

צרו תוכנית לניהול ספר טלפונים באמצעות std::map. התוכנית שלכם תשמור שמות של אנשי קשר ומספרי טלפון, ואז תאפשר למשתמשים להסיר אנשי קשר מסוימים מספר הטלפונים באמצעות המתודה .erase().

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

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

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

  1. ליצור std::map<std::string, std::string> בשם contacts
  2. לקרוא את מספר אנשי הקשר ההתחלתיים ולאכלס את המפה בשמות של אנשי קשר ובמספרי טלפון
  3. להדפיס את ספר הטלפונים הראשוני בפורמט המוצג להלן
  4. לקרוא את מספר אנשי הקשר להסרה
  5. עבור כל שם של איש קשר להסרה, להשתמש במתודה .erase() כדי להסיר אותו מהמפה
  6. להדפיס את ספר הטלפונים המעודכן לאחר כל ההסרות

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

ספר הטלפונים הראשוני:

Initial Contact Directory:
[contact1]: [phone1]
[contact2]: [phone2]
[contact3]: [phone3]
...

ספר הטלפונים המעודכן לאחר ההסרות:

Updated Contact Directory:
[remaining_contact1]: [phone1]
[remaining_contact2]: [phone2]
...

אם ספר הטלפונים מתרוקן לאחר כל ההסרות, הדפיסו:

Updated Contact Directory:
Directory is empty

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

נסו בעצמכם

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

int main() {
    // קרא את מספר אנשי הקשר ההתחלתיים
    int n;
    cin >> n;
    
    // צור את מפת אנשי הקשר
    map<string, string> contacts;
    
    // קרא את אנשי הקשר ההתחלתיים
    for (int i = 0; i < n; i++) {
        string name, phone;
        cin >> name >> phone;
        // TODO: הוסף איש קשר למפה
    }
    
    // הדפס את ספר הטלפונים ההתחלתי
    cout << "Initial Contact Directory:" << endl;
    // TODO: הדפס את כל אנשי הקשר באמצעות לולאת for מבוססת-טווח
    
    // קרא את מספר אנשי הקשר שיש להסיר
    int m;
    cin >> m;
    
    // הסר אנשי קשר
    for (int i = 0; i < m; i++) {
        string nameToRemove;
        cin >> nameToRemove;
        // TODO: הסר איש קשר באמצעות המתודה .erase()
    }
    
    // הדפס את ספר הטלפונים המעודכן
    cout << "Updated Contact Directory:" << endl;
    // TODO: הדפס את אנשי הקשר שנותרו, או "Directory is empty" אם אין כאלה
    
    return 0;
}
quiz iconבחנו את עצמכם

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

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

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