تخطَّ إلى المحتوى

std::unordered_map

الخريطة غير المرتّبة std::unordered_map

std::unordered_map حاوية مفتاح-قيمة مبنية على جدول تجزئة (hash table)، بمتوسط سرعة O(1) للبحث والإدراج لكن بلا أي ترتيب مضمون للعناصر.

بعكس map المبنية على شجرة، unordered_map تستخدم جدول تجزئة داخليًا: يُحسب hash للمفتاح لتحديد موضعه مباشرة تقريبًا، فمتوسط سرعة البحث والإدراج والحذف O(1) — أسرع من map نظريًا للحالة العامة. الثمن: لا يوجد أي ترتيب مضمون بالمرور على العناصر، وقد يتغيّر الترتيب بين تشغيلة وأخرى للبرنامج.

الصياغة

std::unordered_map<Key, Value> name;
name[key] = value;

📄 مثال

#include <unordered_map>

std::unordered_map<std::string, int> wordCount;
wordCount["مرحبا"]++;
wordCount["مرحبا"]++;
wordCount["سلام"]++;

std::cout << wordCount["مرحبا"]; // 2
// ترتيب المرور على العناصر غير مضمون، بعكس map

أهم النقاط

العنصرالوظيفة
operator[key]وصول أو إدراج تلقائي بمتوسط سرعة ثابتة O(1)
find(key)بحث آمن بلا إدراج تلقائي، بمتوسط سرعة O(1)
بلا ترتيب مضمونالمرور على العناصر بأي ترتيب — لا تعتمد عليه إطلاقًا بمنطق برنامجك

💡 نصائح عملية

  • الخيار الافتراضي الأسرع لحاوية مفتاح-قيمة عندما لا تحتاج ترتيبًا — أسرع من map بالحالة العامة
  • إن احتجت المرور على العناصر بترتيب معيّن لاحقًا، استخرج المفاتيح واستخدم std::sort عليها بدل التحول لـ map

⚠️ أخطاء شائعة

  • افتراض أن ترتيب المرور ثابت أو منطقي (مثل ترتيب الإدراج) — غير مضمون إطلاقًا ويعتمد على دالة التجزئة الداخلية
  • استخدام مفتاح من نوع مخصّص بدون توفير دالة hash مخصّصة له — خطأ ترجمة إلى أن تزوّد std::hash تخصيصًا

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CPP الكامل بالعربي.