c++ sort等排序函数 和 priority_queue等模板库 的排序规则的理解

自定义的sort, stable_sort,map,set,priority_queue等都需要传入自定义的比较函数

sort,statble_sort可以需要传入函数指针(函数类型)或仿函数(函数对象)

map,set,priority_queue需要传入仿函数(函数对象)

# sort,statble_sort

        首先搞清楚这些函数对什么样的一个结构进行排序。这些函数排序的是一个序列结构,可以理解为将一个序列中一前一后的两个值a和b进行比较,如cmp(a,b),如果cmp返回true,则将前面的前面的值放在前面,后面的值放在后面,也就是不改变顺序;如果cmp返回false,则将前面的前面的值放在后面,后面的值放在前面,也就是互换a和b

        所以排序方式是,返回true,前面的放前面,返回false,后面的放前面。

# map,set,priority_queue

        这些函数排序的是一个树形结构。其中我们一般不会关注map和set里的排序方式,priority_queue的排序方式影响了他是一个大顶堆还是小顶堆。一般的情况下,priority_queue在进行建堆或者调整堆的时候,都会将父节点和其中一个子节点进行比较。如果用小于号比较,即查看父节点<子节点的返回值,这是构建大顶堆才会去做的操作,(即大顶堆的调整过程为,在两个子节点中去一个较大的子节点,查看父节点<较大的子结点的返回值,如果返回为true,说明应该交换父节点和较大子结点的位置,即后面的值放前面,如果返回为false,说明顺序不变,前面的值反放前面)。

        所以排序的方式是 返回true,后面的放前面,返回false,前面的放前面。

这也是在两个地方排序函数使用的判断符号(大于号或者小于号)相同,但是得到的顺序相反的原因。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值