Namespaces
Variants

C++ named requirements: Compare

From 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 类型。

键的唯一集合,按键排序
(类模板)
键值对集合,按键排序,键具有唯一性
(类模板)
键的集合,按键排序
(类模板)
键值对集合,按键排序
(类模板)
适配容器以提供优先队列功能
(类模板)
将范围按升序排序
(函数模板)
对元素进行排序
( std::forward_list<T,Allocator> 的公开成员函数)
对元素进行排序
( std::list<T,Allocator> 的公开成员函数)
对元素范围进行排序,同时保持相等元素间的相对顺序
(函数模板)
对范围的前N个元素进行排序
(函数模板)
复制并部分排序元素范围
(函数模板)
(C++11)
检查范围是否按升序排序
(函数模板)
寻找最大有序子范围
(函数模板)
对给定范围进行部分排序,确保其按指定元素完成分区
(函数模板)
返回指向首个 不小于 给定值的元素的迭代器
(函数模板)
返回指向首个 大于 特定值的元素的迭代器
(函数模板)
确定元素是否存在于部分有序范围中
(函数模板)
返回匹配特定键的元素范围
(函数模板)
合并两个已排序的范围
(函数模板)
合并两个已排序的列表
std::forward_list<T,Allocator> 的公开成员函数)
合并两个已排序列表
( std::list<T,Allocator> 的公开成员函数)
就地合并两个有序范围
(函数模板)
若一个序列是另一个序列的子序列则返回 true
(函数模板)
计算两个集合的差集
(函数模板)
计算两个集合的交集
(函数模板)
计算两个集合的对称差
(函数模板)
计算两个集合的并集
(函数模板)
向最大堆添加元素
(函数模板)
从最大堆中移除最大元素
(函数模板)
将元素范围转换为最大堆
(函数模板)
将最大堆转换为按升序排序的元素范围
(函数模板)
(C++11)
检查给定范围是否为最大堆
(函数模板)
寻找构成最大堆的最大子范围
(函数模板)
返回给定值中的较大者
(函数模板)
返回范围内的最大元素
(函数模板)
返回给定值中的较小值
(函数模板)
返回范围内的最小元素
(函数模板)
(C++11)
返回两个元素中的较小值和较大值
(函数模板)
返回范围中的最小和最大元素
(函数模板)
若一个范围按字典序小于另一个范围则返回 true
(函数模板)
生成一个范围内元素的下一个更大字典序排列
(函数模板)
生成元素范围的下一个较小字典序排列
(函数模板)

缺陷报告

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

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

另请参阅

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