命名空间
变体
操作

C++ 命名要求: Compare

来自 cppreference.cn
 
 
C++ 命名要求
 

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 起)
建立具有以下属性的严格弱序关系
  • 对于所有 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) == true,则 equiv(b, a) == true
  • 如果 equiv(a, b) == trueequiv(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),比较参数