std::sort可直接对vector快速排序,需传入合法迭代器范围和比较逻辑;默认升序、不稳定、原地排序,支持greater、lambda及自定义比较函数,须满足严格弱序。
直接用 std::sort 就能对 std::vector 快速排序,不需要手写快排,也不用担心稳定性(默认不稳定),关键是要传对迭代器范围和可选的比较逻辑。
对 vector 这类内置类型,默认按数值从小到大排:
std::sort(起始迭代器, 结束迭代器),注意结束迭代器是“末尾后一位”,通常用 v.begin() 和 v.end()
#include#include std::vector v = {3, 1, 4, 1, 5}; std::sort(v.begin(), v.end()); // 排完后 v 变成 {1, 1, 3, 4, 5}
用 std::greater 或 lambda 表达式实现从大到小排:
std::sort(v.begin(), v.end(), std::greater())
vector 按长度降序:std::sort(v.begin(), v.end(), [](const string& a, const string& b) { return a.size() > b.size(); });
核心是提供明确的“谁在前、谁在后”规则。有三种常用方式:
operator:让类支持默认小于比较,之后直接 sort(v.begin(), v.end())
sort(v.begin(), v.end(), [](const Person& a, const Person& b) { return a.age
bool cmp(const T&, const T&)
几个容易出错但实际很关键的点:
v.begin() 后再加偏移,但 v
.begin() == v.end() 是安全的a ,也不能让 cmp(a,a) 返回 true
std::stable_sort