stl严格弱序(stick weak ordering)
STL有序容器对元素关键字的类型有要求,元素关键字的类型必须定义了严格弱序(stick weak ordering)
什么是严格弱序
STL严格弱序条件
如果类型T满足以下Compare
类型 T 满足二元谓词 (BinaryPredicate) 且提供以下两个对象
- T类型的对象
comp
函数 - 一个等价于 !comp(a, b) && !comp(b, a) 的表达式
equiv(a, b)
以下表达式必须合法有效。
表达式 | 返回类型 | 要求 |
---|---|---|
comp(a, b) | 可隐式转换为 bool | 建立具有下列性质的严格弱序关系 a. 对于所有 a,comp(a,a)==false b. 若 comp(a,b)==true 则 comp(b,a)==false c. 若 comp(a,b)==true 且 comp(b,c)==true 则 comp(a,c)==true |
equiv(a, b) | bool | 建立具有下列性质的等价关系 a. 对于所有 a,equiv(a,a)==true b. 若 equiv(a,b)==true 则 equiv(b,a)==true c. 若 equiv(a,b)==true 且 equiv(b,c)==true 则 equiv(a,c)==true |
STL严格弱序实现方式
对于STL中的容器实现<
操作符,这就是一个严格弱序;而<=
不是一个严格弱序
在自定义比较函数(self_compare )的时候需要注意在相等时要返回false, 不能返回true.
严格若序应用
- 标准库中的 map set multiset multiset 等都是严格弱序。
- map 的 key 为自定义对象时需要重载
<
操作符, 需注意相等时返回false。
参考
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!