跳到主要内容

C++ 命名要求: Compare

Compare 是一组要求,一些标准库设施期望用户提供的函数对象类型满足这些要求。

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

与任何BinaryPredicate一样,不允许通过解引用迭代器调用非 const 函数,并且在语法上,函数调用操作必须接受 const 对象参数,并且无论参数是 const 还是非 const,其行为都相同 (C++20起)

要求

如果类型 T 满足 Compare,则

给定

  • comp,一个类型为 T 的对象
  • 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) == true,则 equiv(b, a) == true
* 如果 equiv(a, b) == trueequiv(b, c) == true,则 equiv(a, c) == true

注意:comp 在由 equiv 确定的等价类上引入了严格全序

标准库

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

pubset唯一键的集合,按键排序
pubmap键值对的集合,按键排序,键是唯一的
pubmultiset键的集合,按键排序
pubmultimap键值对的集合,按键排序
pub优先队列使容器适应以提供优先级队列
pubsort将范围按升序排序
(函数模板)
pubsort(C++11)排序元素
(std::forward_list<T,Allocator> 的公共成员函数)
pubsort排序元素
(std::list<T,Allocator> 的公共成员函数)
pubstable_sort排序范围内的元素,同时保留相等元素之间的顺序
pubpartial_sort排序范围的前 N 个元素
pubpartial_sort_copy复制并部分排序范围内的元素
pubis_sorted(C++11)检查范围是否按升序排序
pubis_sorted_until(C++11)查找最大的已排序子范围
pubnth_element部分排序给定范围,确保它由给定元素分区
publower_bound返回指向第一个不小于给定值的元素的迭代器
pubupper_bound返回指向第一个大于特定值的元素的迭代器
pubbinary_search确定元素是否存在于部分有序范围中
pubequal_range返回匹配特定键的元素范围
pubmerge合并两个已排序的范围
(函数模板)
pubmerge(C++11)合并两个已排序的列表
(std::forward_list<T,Allocator> 的公共成员函数)
pubmerge合并两个已排序的列表
(std::list<T,Allocator> 的公共成员函数)
pubinplace_merge就地合并两个有序范围
pubincludes如果一个序列是另一个序列的子序列,则返回 true
pubset_difference计算两个集合之间的差集
pubset_intersection计算两个集合的交集
pubset_symetric_difference计算两个集合的对称差集
pubset_union计算两个集合的并集
pubpush_heap向最大堆添加元素
pubpop_heap从最大堆中删除最大元素
pubmake_heap从元素范围创建最大堆
pubsort_heap将最大堆转换为按升序排序的元素范围
pubis_heap(C++11)检查给定范围是否为最大堆
pubis_heap_until(C++11)查找是最大堆的最大子范围
pubmax返回给定值中较大的一个
pubmax_element返回范围中的最大元素
pubmin返回给定值中较小的一个
pubmin_element返回范围中的最小元素
pubminmax(C++11)返回两个元素中较小和较大的
pubminmax_element(C++11)返回范围中最小和最大的元素
publexicographical_compare如果一个范围在字典上小于另一个,则返回 true
pubnext_permutation生成元素范围的下一个字典序排列
pubprev_permutation生成元素范围的下一个较小字典序排列

C++ 命名要求: Compare

Compare 是一组要求,一些标准库设施期望用户提供的函数对象类型满足这些要求。

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

与任何BinaryPredicate一样,不允许通过解引用迭代器调用非 const 函数,并且在语法上,函数调用操作必须接受 const 对象参数,并且无论参数是 const 还是非 const,其行为都相同 (C++20起)

要求

如果类型 T 满足 Compare,则

给定

  • comp,一个类型为 T 的对象
  • 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) == true,则 equiv(b, a) == true
* 如果 equiv(a, b) == trueequiv(b, c) == true,则 equiv(a, c) == true

注意:comp 在由 equiv 确定的等价类上引入了严格全序

标准库

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

pubset唯一键的集合,按键排序
pubmap键值对的集合,按键排序,键是唯一的
pubmultiset键的集合,按键排序
pubmultimap键值对的集合,按键排序
pub优先队列使容器适应以提供优先级队列
pubsort将范围按升序排序
(函数模板)
pubsort(C++11)排序元素
(std::forward_list<T,Allocator> 的公共成员函数)
pubsort排序元素
(std::list<T,Allocator> 的公共成员函数)
pubstable_sort排序范围内的元素,同时保留相等元素之间的顺序
pubpartial_sort排序范围的前 N 个元素
pubpartial_sort_copy复制并部分排序范围内的元素
pubis_sorted(C++11)检查范围是否按升序排序
pubis_sorted_until(C++11)查找最大的已排序子范围
pubnth_element部分排序给定范围,确保它由给定元素分区
publower_bound返回指向第一个不小于给定值的元素的迭代器
pubupper_bound返回指向第一个大于特定值的元素的迭代器
pubbinary_search确定元素是否存在于部分有序范围中
pubequal_range返回匹配特定键的元素范围
pubmerge合并两个已排序的范围
(函数模板)
pubmerge(C++11)合并两个已排序的列表
(std::forward_list<T,Allocator> 的公共成员函数)
pubmerge合并两个已排序的列表
(std::list<T,Allocator> 的公共成员函数)
pubinplace_merge就地合并两个有序范围
pubincludes如果一个序列是另一个序列的子序列,则返回 true
pubset_difference计算两个集合之间的差集
pubset_intersection计算两个集合的交集
pubset_symetric_difference计算两个集合的对称差集
pubset_union计算两个集合的并集
pubpush_heap向最大堆添加元素
pubpop_heap从最大堆中删除最大元素
pubmake_heap从元素范围创建最大堆
pubsort_heap将最大堆转换为按升序排序的元素范围
pubis_heap(C++11)检查给定范围是否为最大堆
pubis_heap_until(C++11)查找是最大堆的最大子范围
pubmax返回给定值中较大的一个
pubmax_element返回范围中的最大元素
pubmin返回给定值中较小的一个
pubmin_element返回范围中的最小元素
pubminmax(C++11)返回两个元素中较小和较大的
pubminmax_element(C++11)返回范围中最小和最大的元素
publexicographical_compare如果一个范围在字典上小于另一个,则返回 true
pubnext_permutation生成元素范围的下一个字典序排列
pubprev_permutation生成元素范围的下一个较小字典序排列