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

التكرار عبر الخريطة

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

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

إليك الصيغة الأساسية للتكرار عبر عناصر الخريطة (map):

for (auto pair : myMap) {
    // الوصول إلى المفتاح باستخدام pair.first
    // الوصول إلى القيمة باستخدام pair.second
}

كل عنصر في الحلقة التكرارية هو كائن من النوع pair يحتوي على عضوين مهمين: first يحمل المفتاح، و second يحمل القيمة. إليك مثال عملي:

std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;

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

سيقوم هذا بطباعة اسم كل طالب متبوعاً بدرجته. الكلمة المفتاحية auto تحدد تلقائياً النوع الصحيح لكل زوج، مما يجعل الكود الخاص بك أكثر نظافة وأسهل في القراءة.

challenge icon

التحدي

سهل

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

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

  • عدد صحيح n يمثل عدد أصناف القائمة
  • ثم n من أزواج المدخلات:
    • سلسلة نصية (string) تمثل اسم الطبق
    • رقم عشري (double) يمثل سعر الطبق

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

  1. إنشاء std::map<std::string, double> باسم menu
  2. قراءة عدد أصناف القائمة
  3. لكل صنف في القائمة، اقرأ اسم الطبق وسعره، ثم أضفهما إلى الخريطة (map) باستخدام تدوين الأقواس المربعة (square bracket notation)
  4. استخدام حلقة (range-based for loop) للتكرار عبر الخريطة بأكملها وطباعة كل طبق مع سعره
  5. حساب وطباعة العدد الإجمالي للأصناف في القائمة

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

Restaurant Menu:
[dish1]: $[price1]
[dish2]: $[price2]
[dish3]: $[price3]
...
Total menu items: [number of items]

يجب طباعة أصناف القائمة بالترتيب الذي تظهر به عند التكرار عبر الخريطة (الترتيب الأبجدي حسب اسم الطبق). استخدم حلقة (range-based for loop) مع auto pair : menu للتكرار عبر الخريطة، والوصول إلى كل زوج مفتاح وقيمة باستخدام pair.first لاسم الطبق و pair.second للسعر. اطبع كل سعر بمنزلتين عشريتين بالضبط باستخدام std::fixed و std::setprecision(2).

ورقة مرجعية

استخدم حلقة for المبنية على النطاق (range-based for loop) للتكرار عبر جميع أزواج المفتاح والقيمة في std::map:

for (auto pair : myMap) {
    // الوصول إلى المفتاح باستخدام pair.first
    // الوصول إلى القيمة باستخدام pair.second
}

كل عنصر هو كائن زوج (pair object) حيث يحمل first المفتاح ويحمل second القيمة:

std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;

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

تحدد الكلمة المفتاحية auto تلقائيًا النوع الصحيح لكل زوج.

جرّب بنفسك

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

int main() {
    // قراءة عدد عناصر القائمة
    int n;
    cin >> n;
    
    // إنشاء خريطة القائمة
    map<string, double> menu;
    
    // قراءة عناصر القائمة وأسعارها
    for (int i = 0; i < n; i++) {
        string dish;
        double price;
        cin >> dish >> price;
        // TODO: أضف الطبق والسعر إلى خريطة القائمة
    }
    
    // TODO: اطبع ترويسة "Restaurant Menu:"
    
    // TODO: استخدم حلقة for المبنية على النطاق للمرور عبر القائمة وطباعة كل عنصر
    // التنسيق: [dish]: $[price] مع منزلتين عشريتين
    
    // TODO: اطبع العدد الإجمالي لعناصر القائمة
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow