Namespaces
Variants

C++ named requirements: Compare

From cppreference.net
C++ named requirements

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

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

与任何 BinaryPredicate 一样,对该表达式的求值不允许通过解引用迭代器调用非const函数,且在语法上,函数调用操作必须接受 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
(函数模板)
计算两个集合的差集
<span class

缺陷报告

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

缺陷报告 适用范围 发布时的行为 正确行为
LWG 2114
( P2167R3 )
C++98 返回类型到 bool 的上下文可转换性未能
反映实际实现情况
修正了要求规范
LWG 3031 C++98 const 值的要求不够充分 强化了要求规范

参见

指定 relation 施加严格弱序
(概念)
比较运算符 < , <= , > , >= , == , != <=> (C++20) ,用于比较参数