在C++中可以使用STL库中的实现完成排序和搜索,我们只需要定义比较器就可以支持任意类型的任务。
apistd::stable_sort: 元素相等时保持原有顺序,内部实现是归并排序。
std::sort:元素相等时不保证原有顺序,内部实现为快排。
C++中定义的比较器必须满足严格的弱排序,否则会出现未定义行为。比如在具有循环的石头剪子布游戏中,STL无法对其进行正确地排序。
在比较器函数comp(a, b)中,a先序于b则返回true,否则返回false。
严格弱排序在严格弱排序中,只要定义了<,那么既可以得到>和==。
即:
- a > b <=> b < a
- a == b <=> !(a < b) && !(b < a)
此时,如果使用<=这样的非严格偏序的比较符,当a==b的情况下会返回true,大多数算法会失效。
Compare
What is strict weak ordering in C++ sort?



