יצירת מפה
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 24 מתוך 56.
עכשיו, אחרי שהבנת מהי מפה, נלמד איך ליצור אחת ולהוסיף לה זוגות מפתח-ערך. כשמכריזים על std::map, צריך לציין גם את סוג המפתח וגם את סוג הערך באמצעות סוגריים זוויתיים.
הנה התחביר הבסיסי ליצירת מפה:
std::map<KeyType, ValueType> mapName;לדוגמה, כדי ליצור מפה ששומרת שמות של תלמידים כמפתחות ואת ציוני המבחנים שלהם כערכים:
std::map<std::string, int> studentScores;כדי להוסיף איברים למפה שלך, אפשר להשתמש בסימון סוגריים מרובעים עם המפתח, ואז להקצות ערך:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;הדבר יוצר שלושה זוגות מפתח-ערך במפה. השם של כל תלמיד משמש כמפתח שמאפשר לך לאחזר במהירות את הציון המתאים לו.
כדי לעבור על כל האיברים במפה, אפשר להשתמש בלולאת for מבוססת טווח עם auto. כל איבר ב-std::map הוא זוג של מפתח-ערך, ואפשר לגשת למפתח באמצעות .first ולערך באמצעות .second:
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}כאן, auto מסיק אוטומטית את הטיפוס של כל איבר (זוג מפתח-ערך), pair.first מחזיר לך את המפתח (שם התלמיד), ו-pair.second מחזיר לך את הערך (הציון). שים לב ש-std::map שומר אוטומטית את איבריו ממוינים לפי מפתח, ולכן מעבר על המפה ידפיס את הרשומות בסדר אלפביתי.
אתגר
קלצרו תוכנית שבונה מערכת למעקב אחר ציוני תלמידים באמצעות std::map. התוכנית תשמור את שמות התלמידים כמפתחות ואת ציוני המבחנים שלהם כערכים.
הקלטים הבאים יסופקו:
- מספר שלם
nהמייצג את מספר התלמידים - לאחר מכן
nזוגות של קלטים:- מחרוזת המייצגת את שם התלמיד
- מספר שלם המייצג את הציון של התלמיד
על התוכנית:
- ליצור
std::map<std::string, int>בשםgrades - לקרוא את מספר התלמידים
- עבור כל תלמיד, לקרוא את שמו ואת הציון שלו, ואז להוסיף אותם למפה באמצעות סימון סוגריים מרובעים
- לאחר הוספת כל התלמידים, להדפיס את הפרטים של כל תלמיד בפורמט שמוצג בהמשך
- לחשב ולהדפיס את המספר הכולל של התלמידים המאוחסנים במפה
השתמשו בפורמט הפלט המדויק הבא:
Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]יש להדפיס את התלמידים לפי הסדר שבו הם מופיעים בעת איטרציה על המפה (כלומר, בסדר אלפביתי, מכיוון שמפות ממיינות אוטומטית לפי מפתח). השתמשו בלולאת for מבוססת טווח כדי לעבור על המפה, לגשת לכל זוג של מפתח וערך, ולהדפיס את שם התלמיד ואחריו את הציון שלו.
נסו בעצמכם
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// קראו את מספר התלמידים
int n;
cin >> n;
// צרו את המפה לאחסון הציונים
map<string, int> grades;
// TODO: כתבו כאן את הקוד שלכם
// קראו את השם והציון של כל תלמיד, ואז הוסיפו אותם למפה
// הדפיסו את התוצאות
cout << "Student Grades:" << endl;
// TODO: השתמשו בלולאת for מבוססת טווח כדי להדפיס את הציון של כל תלמיד
// הדפיסו את מספר התלמידים הכולל
cout << "Total students: " << grades.size() << endl;
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים4מפות (זוגות מפתח-ערך)
היכרות עם std::mapיצירת מפהגישה לערכים ושינויםבדיקה אם מפתחות קיימיםהסרת זוגותמעבר על מפהסיכום – שכיחות מילים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטיםתרגלו בעצמכם: קומפיילר C++ אונליין