默认升序、cmp 函数、lambda——让任意类型按你的规则排序。
sort 排数组和 vector(默认升序);| 写法 | 含义 | 复杂度 |
|---|---|---|
sort(a, a+n) | 排数组(默认升序) | O(n log n) |
sort(v.begin(), v.end()) | 排 vector | O(n log n) |
sort(..., cmp) | 按 cmp 规则排 | O(n log n) |
sort(..., [](a,b){...}) | lambda 比较器 | C++11 |
return a.x < b.x = 按 x 升序;return a.x > b.x = 降序。结构体多关键字就并列条件:先按分数,再按名字。a<b、b<a、等价 三者之一,且传递。别写能“同时返回 true 和 true”的矛盾比较(如 return a<b || a>b)。a==b 时必须返回 false,不能 true——否则破坏严格弱序,sort 行为未定义。默认排队按身高升序;但你要按成绩排、再按名字排,就得告诉“分拣员”自定义规则(cmp)。它不必知道人长什么样,只要明白“谁排在谁前面”的判定。
“只给规则、不关心细节”是通用抽象:sort 只要一个能回答“a 该在 b 前吗?”的函数,怎么排交给它。
sort(a,a+3) 后是?sort 是升序:< 比较,{3,1,2} 变 {1,2,3}。要降序就传 cmp return a>b。false。a==b 时既不能 a 在前也不能 b 在前,必须 false 才能满足严格弱序,否则 sort 行为未定义。