אני לא מכיר אתרים
שמסבירים בעברית, אבל אני בעצמי השתמשתי ב-map בפרוייקט שעשיתי. בעיקרון map הוא אוסף של זוגות סדורים של אובייקטים. לאיבר הראשון בזוג קוראים "מפתח". לדוגמא:
map<int, string> m;
האובייקט m הוא קבוצה של זוגות סדורים כאשר המפתח של כל זוג יהיה int והאיבר השני בכל זוג יהיה string. החיפוש ב-map נעשה לפי המפתח. אני אומר למתודה find את המפתח והיא מחזירה לי את האיבר השני בזוג המתאים לאותו מפתח. לדוגמא, אם ב-map שהגדרתי מאוכסנים הזוגות הבאים:
(67, "alex") (103,"apple") (656,"thought")
אז כאשר אני מפעיל את המתודה find ונותן לה בתור פרמטר 103, היא תחזיר לי איטרטור המייצג את הזוג 103,apple. זוגות מיוצגים על ידי המחלקה pair. הטיפוסים בזוג pair אמורים להתאים לטיפוסים של ה-map. לדוגמא, עבור האובייקט m הזוגות המתאימים יהיו
pair<int,string>
הוספת זוג לאובייקט map נעשה באמצעות המתודה insert. הנה דוגמא לקטע קוד שמוסיף זוגות לאובייקט map:
typedef map<int,string> id_map; typedef pair<int,string> id_pair; ... id_map m; m.insert( id_pair(1231235,"matan") ); m.insert( id_pair(2348785,"alex") ); m.insert( id_pair(87238947,"dana") );
לאיטרטור שמחזירה המתודה find יש שני "שדות", first ו-second. לפי השמות ניתן להבין ששניהם מייצגים את האיבר הראשון והאיבר השני בזוג. אם המתודה find לא מוצאת זוג בעל המפתח המבוקש היא מחזירה את האיטרטור שמוחזר על ידי המתודה end. הנה קטע קוד שמדגים שימוש בהכנסה וחיפוש.
typedef map<int,string> id_map; typedef pair<int,string> id_pair; ... id_map m; int key; string value; m.insert( id_pair(23,"matan") ); m.insert( id_pair(65,"alex") ); m.insert( id_pair(12,"dana") ); for(int i = 0; i < 100; i++) { id_map::iterator it; it = m.find; if( it == m.end() ) { cout << "There is no pair with the key " << i << " in the map.\n"; } else { key = it->first; value = it->second; cout << "Found a pair with the key " << key << endl; cout << "The pair is (" << key << "," << value << ")" << endl; } }
אני מניח שמכאן אם הבנת את הרעיון הכללי תוכלי להמשיך לקרוא ב-msdn ולהבין מה רוצים ממך. הערה חשובה: המפתחות של המחלקה map חייבים להיות ניתנים להשוואה. ז"א הם חייבים להיות אובייקטים שעליהם מוגדרים האופרטורים <,>,=. ביצועים: בדרך כלל המחלקה map ממומשת באמצעות עץ חיפוש מאוזן שבו המפתח הוא הטיפוס של האיבר הראשון בזוג. עצי חיפוש מאוזנים מאפשרים הכנסה, מחיקה וחיפוש בזמן (O(log n, כאשר n הוא מספר האיברים המאוכסנים בעץ. מקווה שעזרתי.