"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية العثور على العناصر بكفاءة في ناقلات الهياكل باستخدام std::find_if؟

كيفية العثور على العناصر بكفاءة في ناقلات الهياكل باستخدام std::find_if؟

تم النشر بتاريخ 2024-11-01
تصفح:896

How to Efficiently Find Elements in a Vector of Structs Using std::find_if?

البحث عن العناصر في متجه للهياكل باستخدام std::find

عند العمل مع هياكل البيانات المعقدة مثل الهياكل، يمكن أن يصبح البحث من خلال ناقل تلك العناصر أمرًا صعبًا . في هذا السياق، توفر الدالة std::find حلاً لتحديد عناصر معينة داخل المتجه.

فكر في تعريف البنية مثل هذا:

struct monster 
{
    DWORD id;
    int x;
    int y;
    int distance;
    int HP;
};

الآن، لنفترض أن لدينا متجهًا للوحوش:

std::vector monsters;

للبحث عن عنصر بناءً على حقل معين داخل البنية، مثل معرف الوحش، نحتاج إلى استخدام std::find_if بدلاً من std::find. std::find_if يأخذ دالة أصلية كوسيطة، مما يسمح لنا بتحديد معايير البحث.

إليك مثال لاستخدام مكتبة التعزيز:

it = std::find_if(bot.monsters.begin(), bot.monsters.end(), 
        boost::bind(&monster::id, _1) == currentMonster);

أو، إذا لم يكن التعزيز متاحًا، يمكنك إنشاء كائن وظيفة find_id الخاص بك مثل هذا:

struct find_id : std::unary_function {
    DWORD id;
    find_id(DWORD id) : id(id) {}
    bool operator()(monster const& m) const {
        return m.id == id;
    }
};

it = std::find_if(bot.monsters.begin(), bot.monsters.end(), 
         find_id(currentMonster));

باستخدام std::find_if والدالة الأصلية المناسبة، يمكنك البحث بكفاءة من خلال متجه للبنيات للعثور على عناصر محددة بناءً على متغيرات أعضائها.

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

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

Copyright© 2022 湘ICP备2022001581号-3