C++ 具名要求:比较 (Compare)

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

比较 (Compare) 是一些标准库设施针对用户提供的函数对象类型所期待的一组要求。

对满足比较 (Compare) 的类型的对象运用函数调用操作的返回值,当转换bool 时,若此类型所引入的严格弱序关系中,该调用的第一实参先于第二实参,则生成 true,否则生成 false

与任何二元谓词 (BinaryPredicate) 相同,不允许该表达式的求值通过解引用的迭代器调用非 const 函数并且在语法上,此函数调用操作必须接受 const 对象实参,且无论实参是 const 还是非 const 都具有相同行为。

目录

[编辑] 要求

类型 T 满足比较 (Compare) ,如果

给定

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

下列表达是必须合法且拥有指定的效果:

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

符合可布尔测试 (BooleanTestable)

(C++20 前)

实现 boolean-testable

(C++20 起)
建立具有下列性质的严格弱序关系
  • 对于所有 acomp(a, a) == false
  • comp(a, b) == truecomp(b, a) == false
  • comp(a, b) == truecomp(b, c) == truecomp(a, c) == true
equiv(a, b) bool 建立具有下列性质的等价关系
  • 对于所有 aequiv(a, a) == true
  • equiv(a, b) == trueequiv(b, a) == true
  • equiv(a, b) == trueequiv(b, c) == trueequiv(a, c) == true

注:compequiv 所确定的等价类上引入了一种严格全序

[编辑] 标准库

下列标准库设施期待比较 (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)
返回两个元素间的较小者和较大者
(函数模板) [编辑]
返回范围中的最小元和最大元
(函数模板) [编辑]
当一个范围字典序小于另一个时返回 true
(函数模板) [编辑]
生成元素范围的下一个字典序更大的排列
(函数模板) [编辑]
生成元素范围的下一个字典序更小的排列
(函数模板) [编辑]

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 2114
(P2167R3)
C++98 返回类型到 bool 的按语境可转换性不反映实现的实践 更正要求
LWG 3031 C++98 const 值上的要求不充分 加强要求

[编辑] 参阅

指定 relation 施加的是严格弱序
(概念) [编辑]
比较运算符 <<=>>===!= <=>(C++20 起),比较其实参