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

إنشاء خريطة

جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 24 من 56.

الآن بعد أن فهمت ما هي الخريطة (map)، دعنا نتعلم كيفية إنشاء واحدة وإضافة أزواج مفتاح-قيمة إليها. عند التصريح عن std::map، ستحتاج إلى تحديد كل من نوع المفتاح ونوع القيمة باستخدام الأقواس الزاوية.

إليك الصيغة الأساسية لإنشاء map:

std::map<KeyType, ValueType> mapName;

على سبيل المثال، لإنشاء خريطة (map) تخزن أسماء الطلاب كمفاتيح ودرجات اختباراتهم كقيم:

std::map<std::string, int> studentScores;

لإضافة عناصر إلى الخريطة (map) الخاصة بك، يمكنك استخدام تدوين الأقواس المربعة مع المفتاح، ثم تعيين قيمة:

studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;

يؤدي هذا إلى إنشاء ثلاثة أزواج من المفاتيح والقيم في الخريطة. يعمل اسم كل طالب كمفتاح يتيح لك استرجاع درجته المقابلة بسرعة.

لتكرار جميع العناصر في الخريطة (map)، يمكنك استخدام حلقة for المبنية على النطاق (range-based for loop) مع 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

التحدي

سهل

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

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

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

يجب على برنامجك القيام بما يلي:

  1. إنشاء std::map<std::string, int> باسم grades
  2. قراءة عدد الطلاب
  3. لكل طالب، اقرأ اسمه ودرجته، ثم أضفهما إلى الخريطة (map) باستخدام تدوين الأقواس المربعة
  4. بعد إضافة جميع الطلاب، اطبع معلومات كل طالب بالتنسيق الموضح أدناه
  5. احسب واطبع العدد الإجمالي للطلاب المخزنين في الخريطة

استخدم تنسيق المخرجات الدقيق التالي:

Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]

يجب طباعة الطلاب بالترتيب الذي يظهرون به عند التكرار عبر الخريطة (والذي سيكون ترتيباً أبجدياً لأن الخرائط تقوم بالفرز تلقائياً حسب المفتاح). استخدم حلقة for المبنية على النطاق (range-based for loop) للتكرار عبر الخريطة، والوصول إلى كل زوج (مفتاح-قيمة) وطباعة اسم الطالب متبوعاً بدرجته.

جرّب بنفسك

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    // قراءة عدد الطلاب
    int n;
    cin >> n;
    
    // إنشاء الخريطة (map) لتخزين الدرجات
    map<string, int> grades;
    
    // TODO: اكتب الكود الخاص بك هنا
    // قراءة اسم كل طالب ودرجته، ثم إضافتها إلى الخريطة
    
    
    // طباعة النتائج
    cout << "Student Grades:" << endl;
    // TODO: استخدم حلقة for المبنية على النطاق (range-based) لطباعة درجة كل طالب
    
    
    // طباعة العدد الإجمالي للطلاب
    cout << "Total students: " << grades.size() << endl;
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow