Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

إنشاء خريطة

جزء من قسم المنطق وتدفق التنفيذ في رحلة 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 يحافظ تلقائيًا على ترتيب عناصره حسب المفتاح، لذا فإن التكرار عبر الخريطة سيطبع الإدخالات بترتيب أبجدي.

challenge icon

التحدي

سهل

Create برنامجًا ينشئ نظامًا لتتبّع درجات student باستخدام std::map. سيخزّن برنامجك أسماء الطلاب كمفاتيح ودرجات اختباراتهم كقيم.

سيتم توفير المدخلات التالية:

  • عدد صحيح n يمثّل عدد الطلاب
  • ثم n من أزواج المدخلات:
    • سلسلة نصية تمثّل اسم student
    • عدد صحيح يمثّل درجة student

ينبغي لبرنامجك أن يقوم بما يلي:

  1. Create كائن std::map<std::string, int> باسم grades
  2. قراءة عدد الطلاب
  3. لكل student، قراءة اسمه ودرجته، ثم إضافتهما إلى map باستخدام صيغة الأقواس المربعة
  4. بعد إضافة جميع الطلاب، طباعة معلومات كل student بالتنسيق الموضّح أدناه
  5. حساب وطباعة العدد الإجمالي للطلاب المخزّنين في 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;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم C++ عبر الإنترنت