为什么STL要这么设计——严格弱序(stick weak ordering)

如果你想知道严格弱序是什么,推荐看 https://blog.csdn.net/River_Lethe/article/details/78618788

我这里要讲的是我关于严格弱序这个设计的思考,STL为何要给它的用户们设置这样一个关卡,给他们找麻烦呢,但其实细想,这个设计是很绝妙的。

比方说你在进行数据排序的时候,想要写一个自定义的排序方法,你可以重写大于、小于、大于等于 或者是 小于等于,如果你是重写的 >=(非严格弱序)

a >= b  、   b >= a 通过两个对象交换位置,你可以判断出它们之间的 >= 和 <= 关系,但你无法判断这两个数是否相等,是不是这样的?

但如果你重写的是 > (严格弱序),情况就有所不同了

a > b  结果为 true,则大小已定;

如果结果为false,则可知 a <= b,接着判断 b > a,(操作符不变,因为你就提供了一个操作符,交换比较对象的位置),结果为true,则大小已定,若是结果为false,则结果也很显然,那就是 a == b

严格弱序让你实现了,只要传入一个操作符,你就可以知道两个操作数之间的大小关系、是否相等关系,这是非严格弱序所不能实现的。因为C++有很多地方对相同元素是敏感的,就比如说不允许有重复元素出现的set容器,如果把相同元素识别成不同或者根本识别不出来,那是很不恰当的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我有明珠一颗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值