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). يعمل اسم كل طالب كمفتاح يتيح لك استرجاع درجته المقابلة بسرعة.

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

ورقة مرجعية

لإنشاء std::map، حدد أنواع المفتاح والقيمة داخل أقواس زاوية:

std::map<KeyType, ValueType> mapName;

مثال مع مفاتيح من نوع string وقيم integer:

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

أضف العناصر باستخدام تدوين الأقواس المربعة:

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

قم بالتكرار عبر الخريطة باستخدام حلقة for القائمة على النطاق. كل عنصر هو عبارة عن زوج (pair) — استخدم .first للوصول إلى المفتاح و .second للوصول إلى القيمة:

for (const auto& pair : studentScores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

يستنتج auto تلقائيًا نوع كل عنصر، ويتجنب const auto& عمليات النسخ غير الضرورية.

جرّب بنفسك

#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