为什么STL要这么设计——严格弱序(stick weak ordering)
发布于 5 年前 作者 taoli 1764 次浏览 来自 分享

如果你想知道严格弱序是什么,推荐看 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容器,如果把相同元素识别成不同或者根本识别不出来,那是很不恰当的。

回到顶部