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

std::sort

الترتيب std::sort

std::sort ترتّب عناصر أي نطاق (حاوية توفّر وصولًا عشوائيًا مثل vector أو array) تصاعديًا افتراضيًا، بمتوسط أداء ممتاز O(n log n).

تأخذ std::sort مؤشّرين (begin وend) يحددان النطاق المراد ترتيبه، وتقبل معيار مقارنة اختياريًا ثالثًا (comparator) لتغيير منطق الترتيب — تنازليًا، أو حسب حقل معيّن بكائنات مخصّصة. تعمل فقط مع حاويات ذات وصول عشوائي (vector، array، deque)؛ list لها دالة sort() خاصة بها بسبب طبيعتها كقائمة مترابطة.

الصياغة

std::sort(begin, end);
std::sort(begin, end, comparator);

📄 مثال

#include <algorithm>
#include <vector>

std::vector<int> nums = {5, 2, 8, 1, 9};
std::sort(nums.begin(), nums.end()); // 1 2 5 8 9

// ترتيب تنازلي عبر لامدا كمعيار مقارنة
std::sort(nums.begin(), nums.end(), [](int a, int b) { return a > b; });
// 9 8 5 2 1

أهم النقاط

العنصرالوظيفة
std::sort(begin, end)ترتيب تصاعدي افتراضي باستخدام عامل < للنوع
std::sort(begin, end, cmp)ترتيب بمعيار مخصّص (غالبًا لامدا) — تنازلي أو حسب حقل معيّن
std::stable_sortبديل يحافظ على الترتيب النسبي للعناصر المتساوية — أبطأ قليلًا لكن مضمون الاستقرار

💡 نصائح عملية

  • لترتيب كائنات مخصّصة حسب حقل معيّن، مرّر لامدا كمعيار ثالث بدل تحميل operator< زائدًا إن كان الترتيب مؤقتًا فقط
  • استخدم std::stable_sort إذا كان الحفاظ على الترتيب الأصلي للعناصر المتساوية مهمًا لمنطقك

⚠️ أخطاء شائعة

  • تمرير نطاق من حاوية لا تدعم وصولًا عشوائيًا (مثل std::list) لـ std::sort مباشرة — لن يترجم؛ استخدم list.sort() الخاصة بها
  • كتابة معيار مقارنة غير متّسق منطقيًا (لا يحقق strict weak ordering) — يسبب سلوكًا غير معرَّف أحيانًا

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CPP الكامل بالعربي.