C++ 具名要求:比较 (Compare)
来自cppreference.com
比较 (Compare) 是一些标准库设施针对用户提供的函数对象类型所期待的一组要求。
对满足比较 (Compare) 的类型的对象运用函数调用操作的返回值,当转换成 bool 时,若此类型所引入的严格弱序关系中,该调用的第一实参先于第二实参,则生成 true,否则生成 false。
与任何二元谓词 (BinaryPredicate) 相同,不允许该表达式的求值通过解引用的迭代器调用非 const 函数并且在语法上,此函数调用操作必须接受 const 对象实参,且无论实参是 const 还是非 const 都具有相同行为。
要求
类型 T
满足比较 (Compare) ,如果
- 类型
T
满足二元谓词 (BinaryPredicate) ,且
给定
T
类型的对象comp
equiv(a, b)
,为表达式等价于!comp(a, b) && !comp(b, a)
的表达式
下列表达是必须合法且拥有指定的效果:
表达式 | 返回类型 | 要求 | ||||
---|---|---|---|---|---|---|
comp(a, b) |
| 建立具有下列性质的严格弱序关系
| ||||
equiv(a, b) | bool | 建立具有下列性质的等价关系:
|
注:comp
在 equiv
所确定的等价类上引入了一种严格全序。
标准库
下列标准库设施期待比较 (Compare) 类型。
唯一键的集合,按照键排序 (类模板) | |
键值对的集合,按照键排序,键是唯一的 (类模板) | |
键的集合,按照键排序 (类模板) | |
键值对的集合,按照键排序 (类模板) | |
适配一个容器以提供优先级队列 (类模板) | |
将范围按升序排序 (函数模板) | |
对元素进行排序 ( std::forward_list<T,Allocator> 的公开成员函数) | |
对元素进行排序 ( std::list<T,Allocator> 的公开成员函数) | |
将范围中元素排序,同时保持相等元之间的顺序 (函数模板) | |
将范围中前 N 个元素排序 (函数模板) | |
复制范围中元素并部分排序 (函数模板) | |
(C++11) | 检查范围是否已按升序排列 (函数模板) |
(C++11) | 找出最大的有序子范围 (函数模板) |
将给定范围部分排序,确保其按给定元素划分 (函数模板) | |
返回首个不小于 给定值的元素的迭代器 (函数模板) | |
返回首个大于 给定值的元素的迭代器 (函数模板) | |
判断元素是否在偏序范围中 (函数模板) | |
返回匹配特定键值的元素范围 (函数模板) | |
合并两个有序范围 (函数模板) | |
合并两个有序列表 ( std::forward_list<T,Allocator> 的公开成员函数) | |
合并两个有序列表 ( std::list<T,Allocator> 的公开成员函数) | |
就地合并两个有序范围 (函数模板) | |
当一个序列是另一个的子序列时返回 true (函数模板) | |
计算两个集合的差集 (函数模板) | |
计算两个集合的交集 (函数模板) | |
计算两个集合的对称差 (函数模板) | |
计算两个集合的并集 (函数模板) | |
添加元素到最大堆 (函数模板) | |
移除最大堆中最大元 (函数模板) | |
从元素范围创建最大堆 (函数模板) | |
将最大堆变成按升序排序的元素范围 (函数模板) | |
检查给定范围是否为最大堆 (函数模板) | |
(C++11) | 查找能成为最大堆的最大子范围 (函数模板) |
返回给定值中较大者 (函数模板) | |
返回范围中最大元 (函数模板) | |
返回给定值中较小者 (函数模板) | |
返回范围中最小元 (函数模板) | |
(C++11) | 返回两个元素间的较小者和较大者 (函数模板) |
(C++11) | 返回范围中的最小元和最大元 (函数模板) |
当一个范围字典序小于另一个时返回 true (函数模板) | |
生成元素范围的下一个字典序更大的排列 (函数模板) | |
生成元素范围的下一个字典序更小的排列 (函数模板) |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2114 (P2167R3) | C++98 | 返回类型到 bool 的按语境可转换性不反映实现的实践 | 更正要求 |
LWG 3031 | C++98 | const 值上的要求不充分 | 加强要求 |
参阅
(C++20) | 指定 relation 施加的是严格弱序 (概念) |
比较运算符 | < 、<= 、> 、>= 、== 、!= 和 <=> (C++20 起),比较其实参 |