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

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