إنشاء خريطة
جزء من قسم المنطق وتدفق التنفيذ في رحلة C++ على Coddy. الدرس 24 من 56.
الآن بعد أن فهمت ما هي الخريطة، لنتعلّم كيفية إنشاء واحدة وإضافة أزواج مفتاح-قيمة إليها. عند التصريح عن std::map، تحتاج إلى تحديد كلٍّ من نوع المفتاح ونوع القيمة باستخدام الأقواس الزاوية.
إليك الصياغة الأساسية لإنشاء map:
std::map<KeyType, ValueType> mapName;على سبيل المثال، لإنشاء خريطة تخزّن أسماء الطلاب كمفاتيح ودرجات اختباراتهم كقيم:
std::map<std::string, int> studentScores;لإضافة عناصر إلى map الخاصة بك، يمكنك استخدام تدوين الأقواس المربعة مع المفتاح، ثم إسناد قيمة:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;ينشئ هذا ثلاثة أزواج من المفتاح والقيمة في map. ويعمل اسم كل طالب كمفتاح يتيح لك استرداد score المقابل له بسرعة.
للتكرار على جميع العناصر في خريطة، يمكنك استخدام حلقة 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 يحافظ تلقائيًا على ترتيب عناصره حسب المفتاح، لذا فإن التكرار عبر الخريطة سيطبع الإدخالات بترتيب أبجدي.
التحدي
سهلCreate برنامجًا ينشئ نظامًا لتتبّع درجات student باستخدام std::map. سيخزّن برنامجك أسماء الطلاب كمفاتيح ودرجات اختباراتهم كقيم.
سيتم توفير المدخلات التالية:
- عدد صحيح
nيمثّل عدد الطلاب - ثم
nمن أزواج المدخلات:- سلسلة نصية تمثّل اسم student
- عدد صحيح يمثّل درجة student
ينبغي لبرنامجك أن يقوم بما يلي:
- Create كائن
std::map<std::string, int>باسمgrades - قراءة عدد الطلاب
- لكل student، قراءة اسمه ودرجته، ثم إضافتهما إلى map باستخدام صيغة الأقواس المربعة
- بعد إضافة جميع الطلاب، طباعة معلومات كل student بالتنسيق الموضّح أدناه
- حساب وطباعة العدد الإجمالي للطلاب المخزّنين في map
استخدم تنسيق الإخراج الدقيق التالي:
Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]ينبغي طباعة الطلاب بالترتيب الذي يظهرون به عند التكرار عبر map، وهو ما سيكون ترتيبًا أبجديًا لأن الخرائط ترتّب تلقائيًا حسب المفتاح. استخدم حلقة for قائمة على النطاق للتكرار عبر map، والوصول إلى كل زوج من المفتاح والقيمة، ثم طباعة اسم student متبوعًا بدرجته.
جرّب بنفسك
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// اقرأ عدد الطلاب
int n;
cin >> n;
// أنشئ الـ map لتخزين الدرجات
map<string, int> grades;
// TODO: اكتب الكود الخاص بك هنا
// اقرأ اسم كل طالب ودرجته، ثم أضفهما إلى الـ map
// اطبع النتائج
cout << "Student Grades:" << endl;
// TODO: استخدم حلقة for قائمة على النطاق لطباعة درجة كل طالب
// اطبع العدد الإجمالي للطلاب
cout << "Total students: " << grades.size() << endl;
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات4الخرائط (أزواج مفتاح-قيمة)
مقدمة إلى std::mapإنشاء خريطةالوصول إلى القيم وتعديلهاالتحقق من وجود المفاتيححذف الأزواجالتكرار عبر الخريطةمراجعة - تكرار الكلمات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vectorتدرّب بنفسك: مترجم C++ عبر الإنترنت