إعلان
دورة تطوير التطبيقات باستخدام لغة JavaScript في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp. تعلم الآن
دورة تطوير واجهات المستخدم في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية. تعلم الآن
تطوير تطبيقات باستخدام لغة بايثون في هذه الدورة ستتعلم أساسيات البرمجة بلغة بايثون وصولاً إلى التعامل مع أشهر أطر العمل (Flask و Django) و ستتعلم كيف تبني متجر إلكتروني يمكن للمستخدمين البيع و الشراء من خلاله. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة PHP في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة Ruby في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O. تعلم الآن
دورة علوم الحاسوب هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب. تعلم الآن

    C++ الكلاس multimap

    تعريف الكلاس multimap

    يستخدم لإنشاء كائن يمثل حاوية تخزن العناصر التي نضيفها فيها بشكل جدول يتألف من عمودين حيث يتكون كل عنصر من مفتاح ( Key ) يوضع في العمود الأول و قيمة ( Value ) توضع في العمود الثاني بالإضافة إلى أنها ترتب العناصر بشكل تصاعدي على حسب قيم المفاتيح مع الإشارة إلى أنه يمكن وضع نفس المفتاح لأكثر من عنصر كالتالي.



    القيمة المفتاحية لكل عنصر يمكن أن تكون من أي نوع تريده, و لكن في أغلب الأوقات ستكون المفاتيح عبارة عن أعداد أو كلمات.


    معلومة تقنية

    الفرق الوحيد بين الحاوية التي تنشئها من الكلاس map و الحاوية التي تنشئها من الكلاس multimap هو أن هذا الأخير يمكنه أن يستخدم نفس المفتاح لأكثر من عنصر.
    الآن, بما أن مفاتيح العناصر في هذه الحاوية يمكن أن تكون مكررة فهذا يعني أنه لا يمكنك الإعتماد على قيم المفاتيح للتفرقة بين العناصر حيث أن المفتاح الواحد يمكن أن يرمز لعدة عناصر.


    لاستخدام الكلاس multimap - أي حتى تتمكن من إنشاء كائنات منه - يجب تضمين الملف #include<map> لأنه موجود فيه.


    بناء الكلاس

    template < class Key,                                     // multimap::key_type
               class T,                                       // multimap::multimapped_type
               class Compare = less<Key>,                     // multimap::key_compare
               class Alloc = allocator<pair<const Key,T> >    // multimap::allocator_type
               > class multimap;
    	

    إذاً عند إنشاء كائن من الكلاس multimap يجب أن نمرر له نوع المفاتيح التي نريد تخزينها فيه مكان الباراميتر Key و نوع القيم التي نريد تخزينها فيه مكان الباراميتر T.

    دوال الكلاس multimap

    الجدول التالي يحتوي على دوال الكلاس multimap التي تستخدم للحصول على عداد يتيح المرور على عناصره.

    الدالة مع تعريفها
    iterator begin() ترجع كائن iterator يشير لمكان أول عنصر في الكائن الذي قام باستدعائها.
    إذا كنا ننوي استخدام الدالة begin() بداخل حلقة فإننا نستخدم معها الدالة end() من أجل البدء من أول عنصر و الوقوف عند آخر عنصر.
    iterator end() ترجع كائن iterator يشير لمكان آخر عنصر في الكائن الذي قام باستدعائها.
    إذا كنا ننوي استخدام الدالة begin() بداخل حلقة فإننا نستخدم معها الدالة end() من أجل البدء من أول عنصر و الوقوف عند آخر عنصر.
    iterator rbegin() ترجع كائن iterator يشير لمكان آخر عنصر في الكائن الذي قام باستدعائها.
    إذا كنا ننوي استخدام الدالة rbegin() بداخل حلقة فإننا نستخدم معها الدالة rend() من أجل البدء من آخر عنصر و الوقوف عند أول عنصر.
    iterator rend() ترجع كائن iterator يشير لمكان أول عنصر في الكائن الذي قام باستدعائها.
    إذا كنا ننوي استخدام الدالة rbegin() بداخل حلقة فإننا نستخدم معها الدالة rend() من أجل البدء من آخر عنصر و الوقوف عند أول عنصر.

    الجدول التالي يحتوي على دوال الكلاس multimap التي تستخدم للحصول على عدد عناصره.

    الدالة مع تعريفها
    bool empty() تستخدم لمعرفة ما إن كان الكائن الذي قام باستدعائها فارغاً أم لا.
    ترجع false في حال كان يوجد فيه عنصر أو أكثر, و ترجع true إن لم يكن كذلك.
    size_t size() تستخدم للحصول على عدد العناصر الموجودة في الكائن الذي قام باستدعائها.
    size_t max_size() تستخدم للحصول على أكبر عدد عناصر يمكن تخزينها في الكائن الذي قام باستدعائها.

    الجدول التالي يحتوي على دوال الكلاس multimap التي تستخدم للتحكم بعناصره.

    الدالة مع تعريفها
    pair<K, V> insert({key, value}) تستخدم لإضافة عنصر جديد في الكائن الذي قام باستدعائها.
    مكان الباراميتر key نمرر القيمة المفتاحية للعنصر الذي نريد إضافته.
    مكان الباراميتر value نمرر القيمة التي نريد وضعها في العنصر الذي سيتم إضافته.
    كما أنها ترجع نسخة من العنصر الذي تم إضافته.
    pair<K, V> emplace(Args&&... args) تستخدم لإضافة عنصر جديد في الكائن الذي قام باستدعائها تماماً كالدالة insert().
    مكان الباراميتر Args نمرر القيمة المفتاحية للعنصر الذي نريد إضافته ثم نضع فاصلة و نمرر القيمة التي نريد وضعها فيه.
    كما أنها ترجع نسخة من العنصر الذي تم إضافته.
    size_t erase(key_type& k) تستخدم لحذف كل عنصر في الكائن الذي قام باستدعائها يملك المفتاح الذي نمرره لها.
    مكان الباراميتر k نمرر المفتاح الذي نريد حذف كل عنصر يملكه.
    iterator erase(const_iterator position) تستخدم لحذف عنصر محدد من الكائن الذي قام باستدعائها من خلال الإشارة إلى مكانه فيه.
    مكان الباراميتر position نمرر كائن أصله من Iterator يشير لعنوان العنصر الذي سيتم حذفه.
    iterator erase(const_iterator first, const_iterator last) تستخدم لحذف مجموعة عناصر من الكائن الذي قام باستدعائها من خلال الإشارة إلى مكان وجود هذه العناصر.
    مكان الباراميتر first نمرر كائن أصله من const_iterator يشير لعنوان العنصر الذي سيتم بدء الحذف من عنده.
    مكان الباراميتر last نمرر كائن أصله من const_iterator يشير لعنوان العنصر الذي سيتم إيقاف الحذف عنده.
    void swap(multimap& anotherMap) تستخدم لتبديل قيم عناصر الكائن الذي قام باستدعائها بقيم عناصر الكائن الذي نمرره لها.
    مكان الباراميتر anotherMap نمرر لها كائن من الكلاس multimap يملك نفس نوع عناصر الكائن الذي قام باستدعائها.

    الجدول التالي يحتوي على دوال الكلاس multimap التي تستخدم للبحث فيه.

    الدالة مع تعريفها
    size_t count(const key_type& k) تستخدم لمعرفة عدد العناصر التي تملك مفتاح محدد في الكائن الذي قام باستدعائها.
    مكان الباراميتر k نمرر المفتاح الذي نريد معرفة عدد العناصر التي تملكه.
    iterator find(const T& k) تستخدم للبحث في الكائن الذي قام باستدعائها عن مكان أول عنصر يملك مفتاح محدد.
    مكان الباراميتر k نمرر المفتاح الذي نريد البحث عن أول عنصر يملكه.
    في حال تم إيجاد عنصر يملك نفس المفتاح الذي تم تمريره لها ترجع كائن من Iterator يشير لعنوان العنصر في الذاكرة.
    و في حال لم يتم إيجاد عنصر يملك نفس المفتاح الذي تم تمريره لها ترجع كائن من Iterator قيمته تساوي القيمة التي ترجعها الدالة end().

    أمثلة شاملة حول التعامل مع الكلاس multimap

    في كل مثال موضوع قمنا باستخدام دوال جديدة حتى تعرف كيف تستخدم جميع الدوال التي ذكرناها في الجدول.


    في المثال التالي قمنا بتعريف كائن من multimap مع تحديد أن عناصره تتكون من مفاتيح نوعها string قيم و نوعها string أيضاً.
    بعدها قمنا بإضافة بعض العناصر فيه, كل عنصر عبارة منهم عبارة عن كود الإتصال الخاص بالبلد و إسم البلد.
    بعدها قمنا بطباعة عدد العناصر التي قمنا بإضافتها.
    في الأخير قمنا بعرض جميع مفاتيح و قيم العناصر الموجودة فيه بواسطة حلقة.

    ملاحظة: قمنا باستخدام الدالة emplace() لإضافة العناصر, الدالة size() لمعرفة عدد العناصر التي تم إضافتها. عند عرض جميع قيم عناصر الكائن, قمنا باستخدام الدالة begin() للحصول على مؤشر للعنصر الأول لأننا سنبدأ من عنده و الدالة end() للحصول على مؤشر للعنصر الأخير لأننا سنتوقف عنده.

    المثال الأول

    main.cpp
    #include <iostream>
    #include <map>
    
    using namespace std;
    
    int main()
    {
    	// string و قيم نوعها string يمكنه أن يحتوي على مفاتيح نوعها multimap هنا قمنا بتعريف كائن من الكلاس
        multimap<string, string> myMultimap;
    
        // كل عنصر يحتوي على إسم البلد كمفتاح و إحدى مدنه كقيمة ,myMultimap هنا قمنا بإضافة 12 عنصر في الكائن
        myMultimap.emplace("Egypt", "Giza");
        myMultimap.emplace("Lebanon", "Beirut");
        myMultimap.emplace("Syria", "Sweida");
        myMultimap.emplace("Lebanon", "Tripolie");
        myMultimap.emplace("Syria", "Idlib");
        myMultimap.emplace("KSA", "Riyadh");
        myMultimap.emplace("Egypt", "Cairo");
        myMultimap.emplace("Lebanon", "Sidon");
        myMultimap.emplace("Syria", "Damascus");
        myMultimap.emplace("KSA", "Makkah");
        myMultimap.emplace("Syria", "Homs");
        myMultimap.emplace("Algeria", "Algiers");
    	
    	// size() باستخدام الدالة myMultimap هنا قمنا بطباعة عدد عناصر الكائن
        cout << "myMultimap size = " << myMultimap.size() << "\n\n";
    	
        cout << "myMultimap keys and values\n";
        cout << "---------------------\n";
    
    	// إبتداءاً من أول عنصر وصولاً لآخر عنصر فيه myMultimap هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيم عنصر جديد من العناصر الموجودة في الكائن
        for (auto it = myMultimap.begin(); it != myMultimap.end(); ++it)
        {
    		// تمثل قيمة العمود الأول في العنصر و التي تعتبر المفتاح الخاص به first الخاصية
    		// تمثل قيمة العمود الثاني في العنصر و التي تمثل قيمته second و الخاصية
            cout << it->first << "\t | " << it->second << "\n";
        }
    
        return 0;
    }
    		

    سنحصل على النتيجة التالية عند التشغيل.

    myMultimap size = 12
    
    myMultimap keys and values
    ---------------------
    Algeria  | Algiers
    Egypt    | Giza
    Egypt    | Cairo
    KSA      | Riyadh
    KSA      | Makkah
    Lebanon  | Beirut
    Lebanon  | Tripolie
    Lebanon  | Sidon
    Syria    | Sweida
    Syria    | Idlib
    Syria    | Damascus
    Syria    | Homs
    		


    في المثال التالي قمنا بتعريف كائن من multimap مع تحديد أن عناصره تتكون من مفاتيح نوعها int قيم و نوعها string.
    بعدها قمنا بعرض القيم الموجودة فيه بواسطة حلقة.

    المثال الثاني

    main.cpp
    #include <iostream>
    #include <map>
    
    using namespace std;
    
    int main()
    {
    	// string و قيم نوعها int يمكنه أن يحتوي على مفاتيح نوعها multimap هنا قمنا بتعريف كائن من الكلاس
        multimap<int, string> myMultimap = {
    		{1, "One"},
    		{2, "Two"},
    		{3, "Three"},
    		{4, "Four"},
    		{5, "Five"},
    	};
    	
    	// إبتداءاً من أول عنصر وصولاً لآخر عنصر فيه myMultimap هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيم عنصر جديد من العناصر الموجودة في الكائن
        for (auto it = myMultimap.begin(); it != myMultimap.end(); ++it)
        {
    		// تمثل قيمة العمود الأول في العنصر و التي تعتبر المفتاح الخاص به first الخاصية
    		// تمثل قيمة العمود الثاني في العنصر و التي تمثل قيمته second و الخاصية
            cout << it->first << " - " << it->second << "\n";
        }
    
        return 0;
    }
    		

    سنحصل على النتيجة التالية عند التشغيل.

    1 - One
    2 - Two
    3 - Three
    4 - Four
    5 - Five
    		


    في المثال التالي قمنا بتعريف كائن من multimap مع تحديد أن عناصره تتكون من مفاتيح نوعها int قيم و نوعها string.
    بعدها قمنا بعرض القيم الموجودة فيه بشكل عكسي بواسطة حلقة.

    ملاحظة: قمنا باستخدام الدالة rbegin() للحصول على مؤشر للعنصر الأخير لأننا سنبدأ من عنده و الدالة rend() للحصول على مؤشر للعنصر الأول لأننا سنتوقف عنده.

    المثال الثالث

    main.cpp
    #include <iostream>
    #include <map>
    
    using namespace std;
    
    int main()
    {
    	// string و قيم نوعها int يمكنه أن يحتوي على مفاتيح نوعها multimap هنا قمنا بتعريف كائن من الكلاس
        multimap<int, string> myMultimap = {
    		{1, "One"},
    		{2, "Two"},
    		{3, "Three"},
    		{4, "Four"},
    		{5, "Five"},
    	};
    	
    	// إبتداءاً من آخر عنصر وصولاً لأول عنصر فيه myMultimap هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيم عنصر جديد من العناصر الموجودة في الكائن
        for (auto it = myMultimap.rbegin(); it != myMultimap.rend(); ++it)
        {
    		// تمثل قيمة العمود الأول في العنصر و التي تعتبر المفتاح الخاص به first الخاصية
    		// تمثل قيمة العمود الثاني في العنصر و التي تمثل قيمته second و الخاصية
            cout << it->first << " - " << it->second << "\n";
        }
    
        return 0;
    }
    		

    سنحصل على النتيجة التالية عند التشغيل.

    5 - Five
    4 - Four
    3 - Three
    2 - Two
    1 - One
    		


    في المثال التالي قمنا بتعريف كائن من multimap مع تحديد أن عناصره تتكون من مفاتيح نوعها string قيم و نوعها string أيضاً.
    بعدها قمنا بالبحث عن عدد العناصر التي تملك مفتاح محدد و طباعة نتيجة البحث.

    ملاحظة: قمنا باستخدام الدالة count() لمعرفة عدد العناصر التي تملك مفتاح محدد في الكائن.

    المثال الرابع

    main.cpp
    #include <iostream>
    #include <map>
    
    using namespace std;
    
    int main()
    {
    	// string و قيم نوعها string يمكنه أن يحتوي على مفاتيح نوعها multimap هنا قمنا بتعريف كائن من الكلاس
        multimap<string, string> myMultimap;
    
        // كل عنصر يحتوي على إسم البلد كمفتاح و إحدى مدنه كقيمة ,myMultimap هنا قمنا بإضافة 12 عنصر في الكائن
        myMultimap.emplace("Egypt", "Giza");
        myMultimap.emplace("Lebanon", "Beirut");
        myMultimap.emplace("Syria", "Sweida");
        myMultimap.emplace("Lebanon", "Tripolie");
        myMultimap.emplace("Syria", "Idlib");
        myMultimap.emplace("KSA", "Riyadh");
        myMultimap.emplace("Egypt", "Cairo");
        myMultimap.emplace("Lebanon", "Sidon");
        myMultimap.emplace("Syria", "Damascus");
        myMultimap.emplace("KSA", "Makkah");
        myMultimap.emplace("Syria", "Homs");
        myMultimap.emplace("Algeria", "Algiers");
    	
    	// myMultimap في الكائن "Syria" هنا قمنا بطباعة عدد العناصر التي تملك قيمة تساوي
    	cout << "Total number of elements with key 'Syria' = " << myMultimap.count("Syria");
    	
        return 0;
    }
    		

    سنحصل على النتيجة التالية عند التشغيل.

    Total number of elements with key 'Syria' = 4
    		


    في المثال التالي قمنا بتعريف كائن من multimap مع تحديد أن عناصره تتكون من مفاتيح نوعها string قيم و نوعها string أيضاً.
    بعدها قمنا بحذف جميع العناصر التي تملك مفاتيح محددة منه و من ثم طباعة قيم جميع العناصر المتبقية بواسطة حلقة.

    ملاحظة: قمنا باستخدام الدالة erase() لحذف جميع العناصر التي تملك مفاتيح محددة.

    المثال الخامس

    main.cpp
    #include <iostream>
    #include <map>
    
    using namespace std;
    
    int main()
    {
    	// string و قيم نوعها string يمكنه أن يحتوي على مفاتيح نوعها multimap هنا قمنا بتعريف كائن من الكلاس
        multimap<string, string> myMultimap;
    
        // كل عنصر يحتوي على إسم البلد كمفتاح و إحدى مدنه كقيمة ,myMultimap هنا قمنا بإضافة 12 عنصر في الكائن
        myMultimap.emplace("Egypt", "Giza");
        myMultimap.emplace("Lebanon", "Beirut");
        myMultimap.emplace("Syria", "Sweida");
        myMultimap.emplace("Lebanon", "Tripolie");
        myMultimap.emplace("Syria", "Idlib");
        myMultimap.emplace("KSA", "Riyadh");
        myMultimap.emplace("Egypt", "Cairo");
        myMultimap.emplace("Lebanon", "Sidon");
        myMultimap.emplace("Syria", "Damascus");
        myMultimap.emplace("KSA", "Makkah");
        myMultimap.emplace("Syria", "Homs");
        myMultimap.emplace("Algeria", "Algiers");
    	
    	// myMultimap من الكائن "Syria" و المتفاح "Lebanon" هنا قمنا بحذف جميع العناصر التي تملك المفتاح
    	myMultimap.erase("Lebanon");
    	myMultimap.erase("Syria");
    
    	// إبتداءاً من أول عنصر وصولاً لآخر عنصر فيه myMultimap هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيم عنصر جديد من العناصر الموجودة في الكائن
        for (auto it = myMultimap.begin(); it != myMultimap.end(); ++it)
        {
    		// تمثل قيمة العمود الأول في العنصر و التي تعتبر المفتاح الخاص به first الخاصية
    		// تمثل قيمة العمود الثاني في العنصر و التي تمثل قيمته second و الخاصية
            cout << it->first << " -> " << it->second << "\n";
        }
    	
        return 0;
    }
    		

    سنحصل على النتيجة التالية عند التشغيل.

    Algeria -> Algiers
    Egypt -> Giza
    Egypt -> Cairo
    KSA -> Riyadh
    KSA -> Makkah
    		


    في المثال التالي قمنا بتعريف كائن من multimap مع تحديد أن عناصره تتكون من مفاتيح نوعها int قيم و نوعها string.
    بعدها قمنا بالبحث عن أول عنصر يملك مفتاح محدد فيه و من ثم قمنا بحذفه.
    في الأخير قمنا بطباعة قيم جميع العناصر المتبقية بواسطة حلقة.

    ملاحظة: قمنا باستخدام الدالة find() للبحث عن أول عنصر يملك مفتاح محدد في الكائن و الدالة erase() لحذف العنصر منه.

    المثال السادس

    main.cpp
    #include <iostream>
    #include <map>
    
    using namespace std;
    
    int main()
    {
    	// string و قيم نوعها int يمكنه أن يحتوي على مفاتيح نوعها multimap هنا قمنا بتعريف كائن من الكلاس
        multimap<int, string> myMultimap = {
    		{1, "Un"},
    		{1, "One"},
    		{2, "Deux"},
    		{2, "Two"},
    		{3, "Trois"},
    		{3, "Three"}
    	};
    
    	// نجده يملك المفتاح الذي سنبحث عنه myMultimap لتخزين مكان أول عنصر في الكائن multimap<int, string>::iterator منا قمنا بتعريف كائن من 
        multimap<int, string>::iterator it;
    
    	// it عن أول عنصر يملك مفتاح يساوي 2, و بالتالي في حال وجود عنصر يملك هذا المفتاح سيتم تخزين عنوانه في الكائن myMultimap هنا قمنا بالبحث في الكائن
    	// فيه للإشارة إلى أنه لم يتم إيجاد أي عنصر يملك هذا المفتاح myMultimap.end() في حال عدم وجود عنصر يملك مفتاح يساوي 2 سيتم تخزين القيمة التي ترجعها
        it = myMultimap.find(2);
    
    	// فهذا يعني أنه تم إيجاد العنصر و بالتالي سيتم تنفيذ الكود الموضوع بالداخل myMultimap.end() لا تساوي القيمة التي ترجعها الدالة it في حال كانت قيمة
        if (it != myMultimap.end())
        {
    		// و من ثم قمنا بحذفه myMultimap هنا قمنا بطباعة مفتاح و قيمة العنصر الذي تم إيجاده في الكائن
            cout << "Element with key '"<< it->first << "' and value '" << it->second << "' is removed from myMultimap\n\n";
            myMultimap.erase(it);
        }
    
        cout << "myMultimap keys and values:\n";
    
    	// إبتداءاً من أول عنصر وصولاً لآخر عنصر فيه myMultimap هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيم عنصر جديد من العناصر الموجودة في الكائن
        for (auto it = myMultimap.begin(); it != myMultimap.end(); ++it)
        {
    		// تمثل قيمة العمود الأول في العنصر و التي تعتبر المفتاح الخاص به first الخاصية
    		// تمثل قيمة العمود الثاني في العنصر و التي تمثل قيمته second و الخاصية
            cout << it->first << " - " << it->second << "\n";
        }
    	
        return 0;
    }
    		

    سنحصل على النتيجة التالية عند التشغيل.

    Element with key '2' and value 'Deux' is removed from myMultimap
    
    myMultimap keys and values:
    1 - Un
    1 - One
    2 - Two
    3 - Trois
    3 - Three
    		


    في المثال التالي قمنا بتعريف كائنين من multimap مع تحديد أن عناصرهما تتكون من مفاتيح نوعها int قيم و نوعها string.
    بعدها قمنا بتبديل عناصرهما و من ثم طباعة قيم عناصرهما بواسطة حلقة للتأكد من أن التبديل قد تم بنجاح.

    ملاحظة: قمنا باستخدام الدالة swap() لتبديل عناصرهما.

    المثال السابع

    main.cpp
    #include <iostream>
    #include <map>
    
    using namespace std;
    
    int main()
    {
    	// بالإضافة إلى أننا قمنا بإضافة عدة قيم فيه string و قيم نوعها int يمكنه أن يحتوي على مفاتيح نوعها multimap هنا قمنا بتعريف كائن من الكلاس
        multimap<int, string> multimap1 = {
    		{1, "One"},
    		{2, "Two"},
    		{3, "Three"},
    		{4, "Four"}
    	};
    	
    	// بالإضافة إلى أننا قمنا بإضافة عدة قيم فيه string و قيم نوعها int يمكنه أن يحتوي على مفاتيح نوعها multimap هنا قمنا بتعريف كائن آخر من الكلاس
        multimap<int, string> multimap2 = {
    		{5, "Five"},
    		{6, "Six"},
    		{7, "Seven"},
    		{8, "Eight"}
    	};
    
    	// multimap2 مع قيم الكائن multimap1 هنا قمنا بتبديل قيم الكائن
    	multimap1.swap(multimap2);
    	
        cout << "multimap1 keys and values:\n";
    
    	// إبتداءاً من أول عنصر وصولاً لآخر عنصر فيه multimap1 هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيم عنصر جديد من العناصر الموجودة في الكائن
        for (auto it = multimap1.begin(); it != multimap1.end(); ++it)
        {
    		// تمثل قيمة العمود الأول في العنصر و التي تعتبر المفتاح الخاص به first الخاصية
    		// تمثل قيمة العمود الثاني في العنصر و التي تمثل قيمته second و الخاصية
            cout << it->first << " - " << it->second << "\n";
        }
    	
    	cout << "\nmultimap2 keys and values:\n";
    
    	// إبتداءاً من أول عنصر وصولاً لآخر عنصر فيه multimap2 هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيم عنصر جديد من العناصر الموجودة في الكائن
        for (auto it = multimap2.begin(); it != multimap2.end(); ++it)
        {
    		// تمثل قيمة العمود الأول في العنصر و التي تعتبر المفتاح الخاص به first الخاصية
    		// تمثل قيمة العمود الثاني في العنصر و التي تمثل قيمته second و الخاصية
            cout << it->first << " - " << it->second << "\n";
        }
    
        return 0;
    }
    		

    سنحصل على النتيجة التالية عند التشغيل.

    multimap1 keys and values:
    5 - Five
    6 - Six
    7 - Seven
    8 - Eight
    
    multimap2 keys and values:
    1 - One
    2 - Two
    3 - Three
    4 - Four
    		
    إعلان

    Eqla3Tech.com

    شروحات مكتوبة حول لغات البرمجة و تقنية المعلومات باللغة العربية مقدمة من إقلاع تك.

    لغة جافا لغة ++C قواعد البيانات نظام ويندوز نظام لينكس الشبكات تقنية المعلومات الأمن السيبراني

    الدورات

    أدوات مساعدة

    الأقسام

    دورات
    مقالات أسئلة مشاريع كتب