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

< cpp‎ | named req

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

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

与任何二元谓词 (BinaryPredicate) 相同,不允许该表达式的求值通过解引用的迭代器调用非 const 函数。

要求

以下情况下,类型 T 满足比较 (Compare)

给定

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

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

表达式 返回类型 要求
comp(a, b) 可隐式转换bool 建立具有下列性质的严格弱序关系
  • 对于所有 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) 类型。

唯一键的集合,按照键排序
(类模板)
键值对的集合,按照键排序,键是唯一的
(类模板)
键的集合,按照键排序
(类模板)
键值对的集合,按照键排序
(类模板)
适配一个容器以提供优先级队列
(类模板)
将范围按升序排序
(函数模板)
(C++11)
对元素进行排序
(std::forward_list<T,Allocator> 的公开成员函数)
对元素进行排序
(std::list<T,Allocator> 的公开成员函数)
将范围内的元素排序,同时保持相等的元素之间的顺序
(函数模板)
排序一个范围的前 N 个元素
(函数模板)
对范围内的元素进行复制并部分排序
(函数模板)
(C++11)
检查范围是否已按升序排列
(函数模板)
(C++11)
找出最大的已排序子范围
(函数模板)
将给定的范围部分排序,确保其按给定元素划分
(函数模板)
返回指向第一个不小于给定值的元素的迭代器
(函数模板)
返回指向第一个大于给定值的元素的迭代器
(函数模板)
确定元素是否存在于某范围中
(函数模板)
返回匹配特定键值的元素范围
(函数模板)
归并两个有序范围
(函数模板)
(C++11)
合并两个有序 list
(std::forward_list<T,Allocator> 的公开成员函数)
合并两个有序 list
(std::list<T,Allocator> 的公开成员函数)
就地归并两个有序范围
(函数模板)
若一个序列是另一个的子列则返回 true
(函数模板)
计算两个集合的差集
(函数模板)
计算两个集合的交集
(函数模板)
计算两个集合的对称差
(函数模板)
计算两个集合的并集
(函数模板)
将一个元素加入到一个最大堆
(函数模板)
从最大堆中移除最大元素
(函数模板)
从一个元素范围创建出一个最大堆
(函数模板)
将一个最大堆变成一个按升序排序的元素范围
(函数模板)
检查给定范围是否为一个最大堆
(函数模板)
(C++11)
查找能成为最大堆的最大子范围
(函数模板)
返回各给定值中的较大者
(函数模板)
返回范围内的最大元素
(函数模板)
返回各给定值中的较小者
(函数模板)
返回范围内的最小元素
(函数模板)
(C++11)
返回两个元素的较小和较大者
(函数模板)
(C++11)
返回范围内的最小元素和最大元素
(函数模板)
当一个范围按字典顺序小于另一个范围时,返回 true
(函数模板)
产生某个元素范围的按字典顺序的下一个较大的排列
(函数模板)
产生某个元素范围的按字典顺序的下一个较小的排列
(函数模板)

参阅

指定一个 relation 所强加的是严格弱序
(概念)