"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا لا تتضمن C++ STL حاويات شجرية، وما هي البدائل؟

لماذا لا تتضمن C++ STL حاويات شجرية، وما هي البدائل؟

تم النشر بتاريخ 2025-01-16
تصفح:847

Why Doesn\'t the C   STL Include Tree Containers, and What Are the Alternatives?

عدم وجود حاويات شجرية في C STL

لا تقدم مكتبة قوالب C القياسية (STL) أي حاويات "شجرة" . وهذا الإغفال يثير السؤال: لماذا؟ وما هي البدائل المناسبة؟

لماذا لا توجد حاويات شجرية في STL؟

هناك سببان وراء رغبة المرء في بنية بيانات شجرة:

1. تمثيل الكائنات الهرمية: نمذجة التسلسل الهرمي للكائنات الشبيهة بالشجرة في الكود باستخدام بنية شجرة.

2. خصائص الوصول الفعال: ضمان الوصول السريع إلى العناصر بناءً على ترتيب العلاقات، على غرار أشجار البحث الثنائية.

بدائل الهياكل الشجرية

  • ]تعزيز مكتبة الرسوم البيانية: لتمثيل الرسوم البيانية التعسفية، بما في ذلك التسلسل الهرمي الهياكل.
  • الحاويات الترابطية المرتبة:

      std::map وstd::multmap: تعيين المفاتيح إلى القيم، مرتبة حسب المفتاح.
    • std::set وstd::multiset: مجموعات من العناصر الفريدة، مرتبة حسب value.
تعمل هذه الحاويات بشكل فعال كأشجار ثنائية متوازنة، مما يضمن أوقات وصول لوغاريتمية فعالة للإدراج والحذف وعمليات البحث. كما أنها توفر مزايا إضافية، مثل:

    اجتياز المكرر في الوقت الثابت للعناصر بترتيب مفروز.
  • منطق المقارنة المدمج لترتيب المفاتيح.
  • واجهات عامة، مما يسمح لهم بالعمل مع أي نوع مفتاح يدعم المقارنة المشغلين.

مثال: إذا أراد أحد تخزين تسلسل هرمي للموظفين، مع وجود رئيس تنفيذي في الجذر ومستويات متعددة من المرؤوسين، فيمكنه استخدامه std::map<:string std::vector>>. هنا، ستكون مفاتيح الخريطة هي أسماء الموظفين، وستحتفظ المتجهات المرتبطة بأسماء مرؤوسيهم المباشرين.

الاستنتاج

بينما لا توفر C STL حاويات الشجرة مباشرة، فهي توفر بدائل مناسبة لكل من التمثيل الهرمي وخصائص الوصول الفعالة. يمكن لمكتبة الرسوم البيانية في Boost التعامل مع هياكل الرسوم البيانية المعقدة، في حين توفر الحاويات الترابطية المرتبة وصولاً يشبه الشجرة مع واجهة عامة وراسخة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3