Namespaces
Variants

C++ named requirements: Compare

From zh.cppreference.net
C++ named requirements

Compare 是一组标准库设施对用户提供的函数对象类型所期望的要求集合。

当满足 Compare 类型的对象进行函数调用操作时,其返回值在 转换 为 bool 类型后,若调用中的第一个参数在该类型所诱导的 严格弱序关系 中位于第二个参数之前,则结果为 true ,否则为 false 。

与任何 BinaryPredicate 一样,该表达式的求值不允许通过解引用迭代器调用非const函数,且从语法上,函数调用操作必须接受 const 对象参数,无论参数是 const 还是非常量,其行为都应保持一致。

目录

需求规范

类型 T 满足 Compare 条件,当且仅当

给定

  • comp ,一个类型为 T 的对象,
  • equiv ( a, b ) ,一个 表达式等价 于 ! comp ( a, b ) && ! comp ( b, a ) 的表达式。

以下表达式必须有效并具有其指定效果:

表达式 返回类型 要求
comp ( a, b )

满足 BooleanTestable

(C++20 前)

建模 boolean-testable

(C++20 起)
建立具有以下性质的 严格弱序 关系:
  • 对所有 a , comp ( a, a ) == false 。
  • 若 comp ( a, b ) == true 则 comp ( b, a ) == false 。
  • 若 comp ( a, b ) == true 且 comp ( b, c ) == true 则 comp ( a, c ) == true 。
equiv ( a, b ) bool 建立具有以下性质的 等价关系 :
  • 对所有 a , equiv ( a, a ) == true 。
  • 若 equiv ( a, b ) == true ,则 equiv ( b, a ) == true 。
  • 若 equiv ( a, b ) == true 且 equiv ( b, c ) == true ,则 equiv ( a, c ) == true 。

注意: comp 在由 equiv 确定的等价类上引入了 严格全序 。

标准库

以下标准库设施期望一个Compare类型。

唯一键的集合,按键排序
(类模板)
键值对的集合,按键排序,键唯一
(类模板)
键的集合,按键排序
(类模板)
键值对的集合,按键排序
(类模板)
适配容器以提供优先队列
(类模板)
对范围内的元素进行排序
(函数模板 & 算法函数对象)
对元素进行排序
(公有成员函数 of std::forward_list<T,Allocator>)
对元素进行排序
(公有成员函数 of std::list<T,Allocator>)
对范围内的元素进行排序,同时保留等价元素间的相对顺序
(函数模板 & 算法函数对象)
对范围内的前 N 个元素进行排序
(函数模板 & 算法函数对象)
复制并部分排序范围内的元素
(函数模板 & 算法函数对象)
(C++11)
检查范围是否已排序
(函数模板 & 算法函数对象)
找到最大的已排序子范围
(函数模板 & 算法函数对象)
如果范围已排序,找到第 N 个元素
(函数模板 & 算法函数对象)
使用二分查找找到第一个不小于给定值的元素
(函数模板 & 算法函数对象)
使用二分查找找到第一个大于给定值的元素
(函数模板 & 算法函数对象)
使用二分查找确定范围内是否存在元素
(函数模板 & 算法函数对象)
使用二分查找找到匹配给定值的元素范围
(函数模板 & 算法函数对象)
合并两个已排序范围
(函数模板 & 算法函数对象)
合并两个已排序列表
(公有成员函数 of std::forward_list<T,Allocator>)
合并两个已排序列表
(公有成员函数 of std::list<T,Allocator>)
就地合并两个有序范围
(函数模板 & 算法函数对象)
确定一个序列是否为另一个序列的子序列
(函数模板 & 算法函数对象)
计算两个集合的差集
(函数模板 & 算法函数对象)
计算两个集合的交集
(函数模板 & 算法函数对象)
计算两个集合的对称差
(函数模板 & 算法函数对象)
计算两个集合的并集
(函数模板 & 算法函数对象)
向最大堆添加元素
(函数模板 & 算法函数对象)
从最大堆移除最大元素
(函数模板 & 算法函数对象)
从范围内的元素创建一个最大堆
(函数模板 & 算法函数对象)
将最大堆转换为按升序排序的元素范围
(函数模板 & 算法函数对象)
(C++11)
检查给定范围是否为最大堆
(函数模板 & 算法函数对象)
找到最大的最大堆子范围
(函数模板 & 算法函数对象)
返回给定值中的较大者
(函数模板 & 算法函数对象)
返回范围内的最大元素
(函数模板 & 算法函数对象)
返回给定值中的较小者
(函数模板 & 算法函数对象)
返回范围内的最小元素
(函数模板 & 算法函数对象)
(C++11)
返回两个元素中的较小和较大者
(函数模板 & 算法函数对象)
返回范围内的最小和最大元素
(函数模板 & 算法函数对象)
按字典序比较两个范围
(函数模板 & 算法函数对象)
生成范围内元素的字典序下一个更大的排列
(函数模板 & 算法函数对象)
生成范围内元素的字典序下一个更小的排列
(函数模板 & 算法函数对象)

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 适用版本 发布行为 正确行为
LWG 2114
( P2167R3 )
C++98 返回类型到 bool 的上下文可转换性
未能反映实现实践
修正要求规范
LWG 3031 C++98 对 const 值的要求不足 强化要求规范

另请参阅

规定某个 relation 施加严格弱序
(概念)
比较运算符 < 、 <= 、 > 、 >= 、 == 、 != 及 <=> (C++20) 对参数进行比较