[笔记]C++排序相关/比较器/严格弱排序

介绍

在C++中可以使用STL库中的实现完成排序和搜索,我们只需要定义比较器就可以支持任意类型的任务。

api

std::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,大多数算法会失效。

reference

Compare
What is strict weak ordering in C++ sort?

你可能感兴趣的:([笔记],排序算法,算法)