命名空间
变体
操作

C++ 命名需求: Compare

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
全库范围
Compare




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
(C++20)
随机数
并发
(C++11)
Ranges
多维视图
其他

 

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 起)
建立具有以下属性的严格弱序关系
  • 对于所有 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> 的 public 成员函数) [编辑]
排序元素
(std::list<T,Allocator> 的 public 成员函数) [编辑]
对一个范围的元素进行排序,同时保留相等元素之间的顺序
(函数模板) [编辑]
对一个范围的前 N 个元素进行排序
(函数模板) [编辑]
复制并部分排序一个范围的元素
(函数模板) [编辑]
(C++11)
检查一个范围是否按升序排序
(函数模板) [编辑]
寻找最大的已排序子范围
(函数模板) [编辑]
部分排序给定的范围,确保它被给定的元素划分
(函数模板) [编辑]
返回一个指向第一个不小于给定值的元素的迭代器
(函数模板) [编辑]
返回一个指向第一个大于某个值的元素的迭代器
(函数模板) [编辑]
判断一个元素是否存在于部分有序的范围中
(函数模板) [编辑]
返回与特定键匹配的元素范围
(函数模板) [编辑]
归并两个已排序的范围
(函数模板) [编辑]
归并两个已排序链表
(std::forward_list<T,Allocator> 的 public 成员函数) [编辑]
归并两个已排序链表
(std::list<T,Allocator> 的 public 成员函数) [编辑]
就地归并两个有序范围
(函数模板) [编辑]
如果一个序列是另一个序列的子序列,则返回 true
(函数模板) [编辑]
计算两个集合的差集
(函数模板) [编辑]
计算两个集合的交集
(函数模板) [编辑]
计算两个集合的对称差
(函数模板) [编辑]
计算两个集合的并集
(函数模板) [编辑]
向一个最大堆添加一个元素
(函数模板) [编辑]
从一个最大堆中移除最大的元素
(函数模板) [编辑]
从一个元素范围创建一个最大堆
(函数模板) [编辑]
将一个最大堆转换成一个按升序排序的元素范围
(函数模板) [编辑]
(C++11)
检查给定的范围是否是一个最大堆
(函数模板) [编辑]
寻找是一个最大堆的最大子范围
(函数模板) [编辑]
返回给定值中较大的那个
(函数模板) [编辑]
返回一个范围中最大的元素
(函数模板) [编辑]
返回给定值中较小的那个
(函数模板) [编辑]
返回一个范围中最小的元素
(函数模板) [编辑]
(C++11)
返回两个元素中较小和较大的一个
(函数模板) [编辑]
返回范围中最小和最大的元素
(函数模板) [编辑]
如果一个范围在字典上小于另一个范围,则返回 true
(函数模板) [编辑]
生成元素范围的下一个更大的字典序排列
(函数模板) [编辑]
生成元素范围的下一个更小的字典序排列
(函数模板) [编辑]

[编辑] 缺陷报告

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

缺陷报告 应用于 发布时的行为 正确的行为
LWG 2114
(P2167R3)
C++98 返回类型到 bool 的上下文可转换性未
反映实现实践
需求已更正
LWG 3031 C++98 const 值的要求不足 要求已加强

[编辑] 参阅

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