Menu
Coddy logo textTech

חיפוש ערך ב־Map

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

challenge icon

אתגר

קל

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

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

  • מספר שלם n שמייצג את מספר זוגות המפתח-ערך שיש להוסיף למפה
  • לאחר מכן n זוגות של ערכי קלט, שכל אחד מהם מורכב מ:
    • מחרוזת key שמייצגת את המפתח
    • מספר שלם value שמייצג את הערך
  • מספר שלם targetValue שמייצג את הערך שיש לחפש

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

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

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

בשורה הראשונה — מספר המפתחות התואמים:

Keys found: [number_of_matching_keys]

לאחר מכן, כל מפתח תואם בשורה נפרדת:

[matching_key_1]
[matching_key_2]
...

אם אין מפתחות בעלי ערך היעד, הדפיסו רק:

Keys found: 0

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

נסו בעצמכם

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

// TODO: כתבו כאן את הפונקציה findKeysWithValue שלכם

int main() {
    // קראו את מספר זוגות המפתח-ערך
    int n;
    cin >> n;
    
    // צרו מפה לאחסון זוגות מפתח-ערך
    map<string, int> keyValueMap;
    
    // קראו n זוגות מפתח-ערך
    for (int i = 0; i < n; i++) {
        string key;
        int value;
        cin >> key >> value;
        keyValueMap[key] = value;
    }
    
    // קראו את ערך היעד לחיפוש
    int targetValue;
    cin >> targetValue;
    
    // TODO: קראו לפונקציה findKeysWithValue שלכם ושמרו את התוצאה
    
    // TODO: הדפיסו את התוצאות בפורמט הנדרש
    // תחילה הדפיסו "Keys found: [count]"
    // לאחר מכן הדפיסו כל מפתח תואם בשורה נפרדת
    
    return 0;
}

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

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