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 الكامل بالعربي.