الدرس 10 من 10

العدّ والترتيب

هدف الدرس

العدّ بـ std::map والترتيب بـ std::sort ودالة lambda

01

الشرح

القاموس (map) مثل std::map<std::string, int> يربط كل مفتاح بقيمة، ويبقى مرتّبًا حسب مفاتيحه دائمًا. ويكفي السطر counts[item]++ وحده لعدّ العناصر، لأنّ [] تُنشئ المفتاح غير الموجود بقيمة صفر ثم تزيده. وتمرّ على الأزواج بـ for (const auto& [item, n] : counts) التي تفصل كل زوج إلى مفتاح وقيمة، وauto تستنتج النوع بنفسها، وتأتي الأزواج بترتيب المفاتيح.

وانتبه إلى أنّ [] تُنشئ المفتاح حتى لو كنت تقرأ فقط، فـ if (counts["فأس"] > 0) تضيف «فأس» إلى القاموس بقيمة صفر. ومع const std::map& لا يقبل المترجم [] أصلًا، فاستعمل للقراءة count(key) أو at(key) أو المرور على الأزواج.

وترتّب std::sort(v.begin(), v.end()) من <algorithm> العناصر تصاعديًّا بـ <، ولأي ترتيب آخر أعطها دالة مقارنة. وlambda دالة صغيرة تكتبها في المكان الذي تحتاجها فيه، فـ [](const Player& a, const Player& b) { return a.score > b.score; } تُرجع true إذا كان a يأتي قبل b. ولا تضمن std::sort ترتيب العناصر المتساوية، فإذا أردت ترتيبًا ثابتًا فأضف معيارًا ثانيًا يُستعمل عند التساوي.

02

المطلوب

أكمل std::map<std::string, int> countLoot(const std::vector<std::string>& drops) لتُرجع عدد مرّات ظهور كل غنيمة، وstd::string mostCommon(const std::map<std::string, int>& counts) لتُرجع الغنيمة الأكثر تكرارًا، والأسبق في ترتيب القاموس عند التساوي، ونصًّا فارغًا إذا كان القاموس فارغًا. ثم أكمل void sortByScore(std::vector<Player>& players) لترتّب اللاعبين في المتّجه نفسه من الأعلى نقاطًا إلى الأدنى، وبالاسم أبجديًّا عند التساوي.

الفحوص

5 فحوص
  1. الدالة countLoot تعدّ كل غنيمة، وتُرجع قاموسًا فارغًا للقائمة الفارغة
  2. الدالة mostCommon تُرجع الأكثر تكرارًا
  3. الدالة mostCommon تُرجع الأسبق عند التساوي، ونصًّا فارغًا للقاموس الفارغ
  4. الدالة sortByScore تضع الأعلى نقاطًا أوّلًا
  5. الدالة sortByScore ترتّب المتساوين بالاسم أبجديًّا
03

تلميحات

0/3
دروس المسارأتممت 0 من 10

تُكتب بلغة C++ محرّكات الألعاب والمتصفحات وأنظمة التشغيل، لأنها سريعة وتمنحك تحكّمًا كاملًا.

مستواه مبتدئ، وفيه 10 دروس مجموع مدّتها ساعتان.

main.cpp
المخرجاتC++17 (GCC 9, Judge0)

يُترجَم كودك الآن ويُشغَّل على الخادم.

–/5

يُترجَم كودك الآن ويُشغَّل على الخادم.

تجد 5 فحوص في بطاقة «المطلوب».

دروس المسارأتممت 0 من 10

تُكتب بلغة C++ محرّكات الألعاب والمتصفحات وأنظمة التشغيل، لأنها سريعة وتمنحك تحكّمًا كاملًا.

مستواه مبتدئ، وفيه 10 دروس مجموع مدّتها ساعتان.