std::map
الخريطة المرتّبة std::map
std::map حاوية مفتاح-قيمة تحافظ على ترتيب مفاتيحها تلقائيًا، مبنية داخليًا على شجرة متوازنة، بعمليات بحث وإدراج بسرعة O(log n).
كل عنصر بـ map مكوّن من مفتاح فريد وقيمة مرتبطة به (pair<const Key, Value>)، ومفاتيحها مرتّبة تلقائيًا دائمًا (تصاعديًا افتراضيًا) بفضل بنيتها الداخلية كشجرة حمراء-سوداء متوازنة. البحث والإدراج والحذف كلها بتعقيد O(log n) — أبطأ قليلًا من unordered_map (O(1) بالمتوسط) لكن مع ميزة الترتيب التلقائي المضمون عند المرور على العناصر.
الصياغة
std::map<Key, Value> name; name[key] = value; name.find(key);
📄 مثال
#include <map>
std::map<std::string, int> ages;
ages["سارة"] = 25;
ages["عمر"] = 30;
for (const auto& [name, age] : ages) { // مرتّبة أبجديًا تلقائيًا
std::cout << name << ": " << age << "\n";
}
if (ages.find("سارة") != ages.end()) {
std::cout << "موجود";
}أهم النقاط
| العنصر | الوظيفة |
|---|---|
| operator[key] | وصول أو إدراج تلقائي — إن لم يوجد المفتاح، يُنشئ عنصرًا جديدًا بقيمة افتراضية |
| find(key) | بحث آمن يُرجع end() لو لم يوجد المفتاح، بدل إنشاء عنصر جديد كـ [] |
| erase(key) | حذف عنصر بمفتاحه مباشرة |
| الترتيب التلقائي | المرور على map دائمًا بترتيب المفاتيح تصاعديًا (أو حسب comparator مخصّص) |
💡 نصائح عملية
- استخدم find() بدل [] للبحث فقط دون نية الإدراج — [] ينشئ عنصرًا جديدًا تلقائيًا لو المفتاح غير موجود، وقد يخفي أخطاء منطقية
- لو لا تحتاج الترتيب التلقائي وتريد أسرع أداء ممكن، استخدم std::unordered_map بدلًا منها
⚠️ أخطاء شائعة
- استخدام map[key] للتحقق من وجود مفتاح — يُنشئ عنصرًا جديدًا بقيمة افتراضية بالخطأ لو لم يكن موجودًا أصلًا
- توقّع أداء O(1) كأنه unordered_map — map أبطأ منطقيًا بسبب بنيتها الشجرية (O(log n))
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CPP الكامل بالعربي.