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

كيفية فرز ناقل الأزواج بكفاءة بواسطة العنصر الثاني؟

نشر في 2025-02-26
تصفح:823

How to Efficiently Sort a Vector of Pairs by the Second Element?

العنصر الثاني من كل زوج بترتيب تصاعدي. في حين أن إنشاء كائن وظيفة مخصص لهذه المهمة هو حل قابل للحياة ، هناك طرق بديلة تستخدم مكونات STL الحالية و std :: less. نهج واحد هو توظيف مقارن مخصص كوسيطة ثالثة اختيارية لـ Std :: Sort. يتم تعريف هذا المقارنة المخصصة ، المسمى sort_pred ، على النحو التالي:

struct sort_pred { Bool Operator () (const std :: pair & lt ؛ int ، int & gt ؛ & amp ؛ left ، const std :: pair & lt ؛ int ، العودة إلى اليسار. Second & lt ؛ اليمين. } } ؛

لاستخدام هذا المقارنة ، ما عليك سوى تمريره إلى std :: sort: std :: sort (v.begin () ، v.end () ، sort_pred ()) ؛

باستخدام C 11 lambdas
struct sort_pred {
    bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) {
        return left.second < right.second;
    }
};
lambdas بدلاً من المقارنة المخصصة:

std :: sort (v.begin () ، v.end () ، [] :: pair & lt ؛ int ، int & gt ؛ العودة إلى اليسار. Second & lt ؛ اليمين. }) ؛
struct sort_pred {
    bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) {
        return left.second < right.second;
    }
};

باستخدام قالب عام لفرز الزوج & lt ؛ class t1 ، class t2 ، class pred = std :: less & lt ؛ t2 & gt ؛ & gt ؛ struct sort_pair_second { Bool Operator () (const std :: pair & lt ؛ t1 ، t2 & gt ؛ & amp ؛ left ، const std :: pair & lt ؛ t1 ، t2 & gt ؛ & amp ؛ ybor) { قبل P ؛ return p (left.second ، right.second) ؛ } } ؛

مع هذا القالب ، يمكنك تحقيق الفرز المطلوب على النحو التالي: ()) ؛

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

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

Copyright© 2022 湘ICP备2022001581号-3