C++ 命名要求: Compare
Compare 是一组要求,一些标准库设施期望用户提供的函数对象类型满足这些要求。
当应用于满足 Compare 类型的对象的函数调用操作的返回值,在上下文中转换为 bool
时,如果调用的第一个参数在此类型引入的严格弱序关系中出现在第二个参数之前,则返回 true,否则返回 false。
与任何BinaryPredicate一样,不允许通过解引用迭代器调用非 const 函数,并且在语法上,函数调用操作必须接受 const 对象参数,并且无论参数是 const 还是非 const,其行为都相同 (C++20起)。
要求
如果类型 T 满足 Compare,则
- 类型 T 满足BinaryPredicate,并且
给定
comp
,一个类型为T
的对象equiv(a, b)
,与!comp(a, b) && !comp(b, a)
表达式等效。
以下表达式必须有效并具有其指定的效果
表达式 | 返回类型 | 要求 |
---|---|---|
comp(a, b) | 可隐式转换为 bool | 建立具有以下属性的严格弱序关系 * 对于所有 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 类型。
pub | set | 唯一键的集合,按键排序 |
pub | map | 键值对的集合,按键排序,键是唯一的 |
pub | multiset | 键的集合,按键排序 |
pub | multimap | 键值对的集合,按键排序 |
pub | 优先队列 | 使容器适应以提供优先级队列 |
pub | sort | 将范围按升序排序 (函数模板) |
pub | sort(C++11) | 排序元素 (std::forward_list<T,Allocator> 的公共成员函数) |
pub | sort | 排序元素 (std::list<T,Allocator> 的公共成员函数) |
pub | stable_sort | 排序范围内的元素,同时保留相等元素之间的顺序 |
pub | partial_sort | 排序范围的前 N 个元素 |
pub | partial_sort_copy | 复制并部分排序范围内的元素 |
pub | is_sorted(C++11) | 检查范围是否按升序排序 |
pub | is_sorted_until(C++11) | 查找最大的已排序子范围 |
pub | nth_element | 部分排序给定范围,确保它由给定元素分区 |
pub | lower_bound | 返回指向第一个不小于给定值的元素的迭代器 |
pub | upper_bound | 返回指向第一个大于特定值的元素的迭代器 |
pub | binary_search | 确定元素是否存在于部分有序范围中 |
pub | equal_range | 返回匹配特定键的元素范围 |
pub | merge | 合并两个已排序的范围 (函数模板) |
pub | merge(C++11) | 合并两个已排序的列表 (std::forward_list<T,Allocator> 的公共成员函数) |
pub | merge | 合并两个已排序的列表 (std::list<T,Allocator> 的公共成员函数) |
pub | inplace_merge | 就地合并两个有序范围 |
pub | includes | 如果一个序列是另一个序列的子序列,则返回 true |
pub | set_difference | 计算两个集合之间的差集 |
pub | set_intersection | 计算两个集合的交集 |
pub | set_symetric_difference | 计算两个集合的对称差集 |
pub | set_union | 计算两个集合的并集 |
pub | push_heap | 向最大堆添加元素 |
pub | pop_heap | 从最大堆中删除最大元素 |
pub | make_heap | 从元素范围创建最大堆 |
pub | sort_heap | 将最大堆转换为按升序排序的元素范围 |
pub | is_heap(C++11) | 检查给定范围是否为最大堆 |
pub | is_heap_until(C++11) | 查找是最大堆的最大子范围 |
pub | max | 返回给定值中较大的一个 |
pub | max_element | 返回范围中的最大元素 |
pub | min | 返回给定值中较小的一个 |
pub | min_element | 返回范围中的最小元素 |
pub | minmax(C++11) | 返回两个元素中较小和较大的 |
pub | minmax_element(C++11) | 返回范围中最小和最大的元素 |
pub | lexicographical_compare | 如果一个范围在字典上小于另一个,则返回 true |
pub | next_permutation | 生成元素范围的下一个字典序排列 |
pub | prev_permutation | 生成元素范围的下一个较小字典序排列 |