חיפוש ערך ב־Map
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 55 מתוך 56.
אתגר
קלצרו תוכנית שמממשת מערכת חיפוש הפוך למציאת כל המפתחות המשויכים לערך מסוים במפה. האתגר הזה יבחן את היכולת שלכם לשלב מעבר על מפה, השוואת ערכים ובניית וקטור כדי לחפש ביעילות זוגות של מפתח-ערך.
הקלט הבא יסופק:
- מספר שלם
nשמייצג את מספר זוגות המפתח-ערך שיש להוסיף למפה - לאחר מכן
nזוגות של ערכי קלט, שכל אחד מהם מורכב מ:- מחרוזת
keyשמייצגת את המפתח - מספר שלם
valueשמייצג את הערך
- מחרוזת
- מספר שלם
targetValueשמייצג את הערך שיש לחפש
התוכנית שלכם צריכה:
- ליצור פונקציה בשם
findKeysWithValueשמקבלתstd::map<std::string, int>ומספר שלם כפרמטרים - הפונקציה צריכה להחזיר
std::vector<std::string>שמכיל את כל המפתחות בעלי הערך שצוין - בפונקציה הראשית, ליצור מפה ולאכלס אותה בזוגות המפתח-ערך שהתקבלו בקלט
- לקרוא לפונקציה
findKeysWithValueעם המפה וערך היעד - להדפיס תחילה את מספר המפתחות התואמים, ואז להדפיס כל מפתח תואם בשורה נפרדת
השתמשו בפורמט הפלט המדויק הבא:
בשורה הראשונה — מספר המפתחות התואמים:
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;
}כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטיםתרגלו בעצמכם: קומפיילר C++ אונליין