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
)
|
|
建立具有以下性质的
严格弱序
关系:
-
对所有
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类型。
|
|
唯一键的集合,按键排序 (类模板)
|
|
|
键值对的集合,按键排序,键唯一 (类模板)
|
|
|
键的集合,按键排序 (类模板)
|
|
|
键值对的集合,按键排序 (类模板)
|
|
|
适配容器以提供优先队列 (类模板)
|
|
|
对范围内的元素进行排序 (函数模板 & 算法函数对象)
|
|
|
|
|
|
对元素进行排序 (公有成员函数 of std::forward_list<T,Allocator>)
|
|
|
对元素进行排序 (公有成员函数 of std::list<T,Allocator>)
|
|
|
对范围内的元素进行排序,同时保留等价元素间的相对顺序 (函数模板 & 算法函数对象)
|
|
|
|
|
|
对范围内的前 N 个元素进行排序 (函数模板 & 算法函数对象)
|
|
|
|
|
|
复制并部分排序范围内的元素 (函数模板 & 算法函数对象)
|
|
|
|
|
|
检查范围是否已排序 (函数模板 & 算法函数对象)
|
|
|
|
|
|
找到最大的已排序子范围 (函数模板 & 算法函数对象)
|
|
|
|
|
|
如果范围已排序,找到第 N 个元素 (函数模板 & 算法函数对象)
|
|
|
|
|
|
使用二分查找找到第一个不小于给定值的元素 (函数模板 & 算法函数对象)
|
|
|
|
|
|
使用二分查找找到第一个大于给定值的元素 (函数模板 & 算法函数对象)
|
|
|
|
|
|
使用二分查找确定范围内是否存在元素 (函数模板 & 算法函数对象)
|
|
|
|
|
|
使用二分查找找到匹配给定值的元素范围 (函数模板 & 算法函数对象)
|
|
|
|
|
|
合并两个已排序范围 (函数模板 & 算法函数对象)
|
|
|
|
|
|
合并两个已排序列表 (公有成员函数 of std::forward_list<T,Allocator>)
|
|
|
合并两个已排序列表 (公有成员函数 of std::list<T,Allocator>)
|
|
|
就地合并两个有序范围 (函数模板 & 算法函数对象)
|
|
|
|
|
|
确定一个序列是否为另一个序列的子序列 (函数模板 & 算法函数对象)
|
|
|
|
|
|
计算两个集合的差集 (函数模板 & 算法函数对象)
|
|
|
|
|
|
计算两个集合的交集 (函数模板 & 算法函数对象)
|
|
|
|
|
|
计算两个集合的对称差 (函数模板 & 算法函数对象)
|
|
|
|
|
|
计算两个集合的并集 (函数模板 & 算法函数对象)
|
|
|
|
|
|
向最大堆添加元素 (函数模板 & 算法函数对象)
|
|
|
|
|
|
从最大堆移除最大元素 (函数模板 & 算法函数对象)
|
|
|
|
|
|
从范围内的元素创建一个最大堆 (函数模板 & 算法函数对象)
|
|
|
|
|
|
将最大堆转换为按升序排序的元素范围 (函数模板 & 算法函数对象)
|
|
|
|
|
|
检查给定范围是否为最大堆 (函数模板 & 算法函数对象)
|
|
|
|
|
|
找到最大的最大堆子范围 (函数模板 & 算法函数对象)
|
|
|
|
|
|
返回给定值中的较大者 (函数模板 & 算法函数对象)
|
|
|
|
|
|
返回范围内的最大元素 (函数模板 & 算法函数对象)
|
|
|
|
|
|
返回给定值中的较小者 (函数模板 & 算法函数对象)
|
|
|
|
|
|
返回范围内的最小元素 (函数模板 & 算法函数对象)
|
|
|
|
|
|
返回两个元素中的较小和较大者 (函数模板 & 算法函数对象)
|
|
|
|
|
|
返回范围内的最小和最大元素 (函数模板 & 算法函数对象)
|
|
|
|
|
|
按字典序比较两个范围 (函数模板 & 算法函数对象)
|
|
|
|
|
|
生成范围内元素的字典序下一个更大的排列 (函数模板 & 算法函数对象)
|
|
|
|
|
|
生成范围内元素的字典序下一个更小的排列 (函数模板 & 算法函数对象)
|
|
|
|
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
|
DR
|
适用版本
|
发布行为
|
正确行为
|
LWG 2114
(
P2167R3
)
|
C++98
|
返回类型到
bool
的上下文可转换性
未能反映实现实践
|
修正要求规范
|
|
LWG 3031
|
C++98
|
对
const
值的要求不足
|
强化要求规范
|
另请参阅
|
|
规定某个
relation
施加严格弱序
(概念)
|
|
比较运算符
|
<
、
<=
、
>
、
>=
、
==
、
!=
及
<=>
(C++20)
对参数进行比较
|
|