C++ std::sort 排序全攻略
std::sort 的基本用法
std::sort 是 C++ 标准库中的一个高效排序算法,位于 <algorithm> 头文件中。它接受两个迭代器参数,表示排序范围的起始和结束位置。
#include <algorithm>
#include <vector>
std::vector<int> vec = {4, 2, 5, 3, 1};
std::sort(vec.begin(), vec.end());
自定义比较函数
std::sort 允许通过提供自定义比较函数来实现不同的排序顺序。比较函数应返回布尔值,指示第一个参数是否应排在第二个参数之前。
bool descending(int a, int b) {
return a > b;
}
std::sort(vec.begin(), vec.end(), descending);
使用 Lambda 表达式
C++11 引入的 lambda 表达式可以更方便地定义临时比较逻辑。
std::sort(vec.begin(), vec.end(), [](int a, int b) {
return a < b;
});
排序稳定性
std::sort 不保证排序的稳定性。如果需要稳定排序,可以使用 std::stable_sort,其用法与 std::sort 相同但能保持相等元素的相对顺序。
std::stable_sort(vec.begin(), vec.end());
性能特点
std::sort 平均时间复杂度为 O(N log N),实现通常基于快速排序或内省排序。对于小范围数据(如少于 32 个元素),可能转为插入排序以提高性能。
对自定义类型排序
当排序自定义类型时,需要提供比较函数或重载比较运算符。
struct Person {
std::string name;
int age;
};
std::vector<Person> people;
std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) {
return a.age < b.age;
});
部分排序
std::partial_sort 可用于只对前 N 个元素进行排序,其余元素顺序不定。
std::vector<int> vec = {5, 3, 1, 4, 2};
std::partial_sort(vec.begin(), vec.begin() + 3, vec.end());
注意事项
排序范围必须有效,迭代器应指向同一容器且不越界。比较函数必须满足严格弱序关系:自反性、反对称性和传递性。修改比较函数中的元素可能导致未定义行为。
BbS.okacop010.info/PoSt/1120_368956.HtM
BbS.okacop011.info/PoSt/1120_089885.HtM
BbS.okacop012.info/PoSt/1120_026489.HtM
BbS.okacop013.info/PoSt/1120_095539.HtM
BbS.okacop014.info/PoSt/1120_641801.HtM
BbS.okacop015.info/PoSt/1120_097002.HtM
BbS.okacop016.info/PoSt/1120_058554.HtM
BbS.okacop017.info/PoSt/1120_458167.HtM
BbS.okacop018.info/PoSt/1120_115715.HtM
BbS.okacop019.info/PoSt/1120_510729.HtM
BbS.okacop020.info/PoSt/1120_753587.HtM
BbS.okacop021.info/PoSt/1120_696663.HtM
BbS.okacop022.info/PoSt/1120_466593.HtM
BbS.okacop023.info/PoSt/1120_688113.HtM
BbS.okacop024.info/PoSt/1120_331925.HtM
BbS.okacop025.info/PoSt/1120_357064.HtM
BbS.okacop026.info/PoSt/1120_068854.HtM
BbS.okacop027.info/PoSt/1120_846767.HtM
BbS.okacop028.info/PoSt/1120_598593.HtM
BbS.okacop029.info/PoSt/1120_734585.HtM
BbS.okacop020.info/PoSt/1120_577763.HtM
BbS.okacop021.info/PoSt/1120_673979.HtM
BbS.okacop022.info/PoSt/1120_095291.HtM
BbS.okacop023.info/PoSt/1120_846136.HtM
BbS.okacop024.info/PoSt/1120_284289.HtM
BbS.okacop025.info/PoSt/1120_355470.HtM
BbS.okacop026.info/PoSt/1120_421665.HtM
BbS.okacop027.info/PoSt/1120_105147.HtM
BbS.okacop028.info/PoSt/1120_262253.HtM
BbS.okacop029.info/PoSt/1120_674760.HtM
BbS.okacop020.info/PoSt/1120_520382.HtM
BbS.okacop021.info/PoSt/1120_145917.HtM
BbS.okacop022.info/PoSt/1120_305522.HtM
BbS.okacop023.info/PoSt/1120_274529.HtM
BbS.okacop024.info/PoSt/1120_403061.HtM
BbS.okacop025.info/PoSt/1120_183027.HtM
BbS.okacop026.info/PoSt/1120_411173.HtM
BbS.okacop027.info/PoSt/1120_664169.HtM
BbS.okacop028.info/PoSt/1120_802057.HtM
BbS.okacop029.info/PoSt/1120_037599.HtM
BbS.okacop020.info/PoSt/1120_870838.HtM
BbS.okacop021.info/PoSt/1120_074609.HtM
BbS.okacop022.info/PoSt/1120_047826.HtM
BbS.okacop023.info/PoSt/1120_345868.HtM
BbS.okacop024.info/PoSt/1120_374861.HtM
BbS.okacop025.info/PoSt/1120_526763.HtM
BbS.okacop026.info/PoSt/1120_212521.HtM
BbS.okacop027.info/PoSt/1120_361563.HtM
BbS.okacop028.info/PoSt/1120_004092.HtM
BbS.okacop029.info/PoSt/1120_410843.HtM
BbS.okacop020.info/PoSt/1120_439874.HtM
BbS.okacop021.info/PoSt/1120_591834.HtM
BbS.okacop022.info/PoSt/1120_031797.HtM
BbS.okacop023.info/PoSt/1120_770611.HtM
BbS.okacop024.info/PoSt/1120_331462.HtM
BbS.okacop025.info/PoSt/1120_228985.HtM
BbS.okacop026.info/PoSt/1120_372208.HtM
BbS.okacop027.info/PoSt/1120_641346.HtM
BbS.okacop028.info/PoSt/1120_355560.HtM
BbS.okacop029.info/PoSt/1120_415067.HtM
BbS.okacop020.info/PoSt/1120_076089.HtM
BbS.okacop021.info/PoSt/1120_672948.HtM
BbS.okacop022.info/PoSt/1120_065588.HtM
BbS.okacop023.info/PoSt/1120_951073.HtM
BbS.okacop024.info/PoSt/1120_099067.HtM
BbS.okacop025.info/PoSt/1120_963637.HtM
BbS.okacop026.info/PoSt/1120_246426.HtM
BbS.okacop027.info/PoSt/1120_191361.HtM
BbS.okacop028.info/PoSt/1120_531241.HtM
BbS.okacop029.info/PoSt/1120_516142.HtM
BbS.okacop020.info/PoSt/1120_041795.HtM
BbS.okacop021.info/PoSt/1120_463274.HtM
BbS.okacop022.info/PoSt/1120_422853.HtM
BbS.okacop023.info/PoSt/1120_806621.HtM
BbS.okacop024.info/PoSt/1120_276981.HtM
BbS.okacop025.info/PoSt/1120_003918.HtM
BbS.okacop026.info/PoSt/1120_854350.HtM
BbS.okacop027.info/PoSt/1120_979165.HtM
BbS.okacop028.info/PoSt/1120_396662.HtM
BbS.okacop029.info/PoSt/1120_225139.HtM
顺丰集团工作强度 319人发布
