命名空间
变体
操作

C++ 命名需求: 比较

来自 cppreference.com
 
 
C++ 命名需求
 

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

当将应用于满足 比较 的类型的对象的函数调用操作的返回值 转换为 bool 时,如果调用的第一个参数在此类型引起的 严格弱排序关系 中出现在第二个参数之前,则产生 true,否则产生 false

与任何 二元谓词 一样,不允许对该表达式的计算通过解引用迭代器调用非常量函数,并且在语法上,函数调用操作必须接受 const 对象参数,无论参数是 const 还是非 const,行为都相同。

内容

[编辑] 要求

如果类型 T 满足以下条件,则类型 T 满足 比较

给定

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

以下表达式必须有效,并具有其指定的效应:

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

满足 布尔可测试

(直到 C++20)

建模为 布尔可测试

(自 C++20 起)
建立 严格弱排序 关系,具有以下属性:
  • 对于所有 acomp(a, a) == false
  • 如果 comp(a, b) == true,则 comp(b, a) == false
  • 如果 comp(a, b) == truecomp(b, c) == true,则 comp(a, c) == true
equiv(a, b) bool 建立 等价关系,具有以下属性:
  • 对于所有 aequiv(a, a) == true
  • 如果 equiv(a, b) == true,则 equiv(b, a) == true
  • 如果 equiv(a, b) == trueequiv(b, c) == true,则 equiv(a, c) == true

注意:compequiv 确定的等价类上引起 严格全排序

[编辑] 标准库

以下标准库设施期望 比较 类型。

唯一键的集合,按键排序
(类模板) [编辑]
键值对的集合,按键排序,键是唯一的
(类模板) [编辑]
键的集合,按键排序
(类模板) [编辑]
键值对的集合,按键排序
(类模板) [编辑]
调整容器以提供优先队列
(类模板) [编辑]
将范围排序为升序
(函数模板) [编辑]
对元素进行排序
(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) 比较参数。