C++ named requirements: Compare - cppreference.com (original) (raw)

Compare is a set of requirements expected by some of the standard library facilities from the user-provided function object types.

The return value of the function call operation applied to an object of a type satisfying Compare, when converted to bool, yields true if the first argument of the call appears before the second in the strict weak ordering relation induced by this type, and false otherwise.

As with any BinaryPredicate, evaluation of that expression is not allowed to call non-const functions through the dereferenced iterators and, syntactically, the function call operation must accept const object arguments, with the same behavior regardless of whether the arguments are const or non-const.

[edit] Requirements

The type T satisfies Compare if

Given

The following expressions must be valid and have their specified effects:

Expression Return type Requirements
comp(a, b) meets BooleanTestable (until C++20) models boolean-testable (since C++20) Establishes strict weak ordering relation with the following properties: For all a, comp(a, a) == false. If comp(a, b) == true then comp(b, a) == false. if comp(a, b) == true and comp(b, c) == true then comp(a, c) == true.
equiv(a, b) bool Establishes equivalence relationship with the following properties: For all a, equiv(a, a) == true. If equiv(a, b) == true, then equiv(b, a) == true. If equiv(a, b) == true and equiv(b, c) == true, then equiv(a, c) == true.

Note: comp induces a strict total ordering on the equivalence classes determined by equiv.

[edit] Standard library

The following standard library facilities expect a Compare type.

set collection of unique keys, sorted by keys (class template) [edit]
map collection of key-value pairs, sorted by keys, keys are unique (class template) [edit]
multiset collection of keys, sorted by keys (class template) [edit]
multimap collection of key-value pairs, sorted by keys (class template) [edit]
priority_queue adapts a container to provide priority queue (class template) [edit]
sort sorts a range into ascending order (function template) [edit]
sort sorts the elements (public member function of std::forward_list<T,Allocator>) [edit]
sort sorts the elements (public member function of std::list<T,Allocator>) [edit]
stable_sort sorts a range of elements while preserving order between equal elements (function template) [edit]
partial_sort sorts the first N elements of a range (function template) [edit]
partial_sort_copy copies and partially sorts a range of elements (function template) [edit]
is_sorted(C++11) checks whether a range is sorted into ascending order (function template) [edit]
is_sorted_until(C++11) finds the largest sorted subrange (function template) [edit]
nth_element partially sorts the given range making sure that it is partitioned by the given element (function template) [edit]
lower_bound returns an iterator to the first element not less than the given value (function template) [edit]
upper_bound returns an iterator to the first element greater than a certain value (function template) [edit]
binary_search determines if an element exists in a partially-ordered range (function template) [edit]
equal_range returns range of elements matching a specific key (function template) [edit]
merge merges two sorted ranges (function template) [edit]
merge merges two sorted lists (public member function of std::forward_list<T,Allocator>) [edit]
merge merges two sorted lists (public member function of std::list<T,Allocator>) [edit]
inplace_merge merges two ordered ranges in-place (function template) [edit]
includes returns true if one sequence is a subsequence of another (function template) [edit]
set_difference computes the difference between two sets (function template) [edit]
set_intersection computes the intersection of two sets (function template) [edit]
set_symmetric_difference computes the symmetric difference between two sets (function template) [edit]
set_union computes the union of two sets (function template) [edit]
push_heap adds an element to a max heap (function template) [edit]
pop_heap removes the largest element from a max heap (function template) [edit]
make_heap creates a max heap out of a range of elements (function template) [edit]
sort_heap turns a max heap into a range of elements sorted in ascending order (function template) [edit]
is_heap(C++11) checks if the given range is a max heap (function template) [edit]
is_heap_until(C++11) finds the largest subrange that is a max heap (function template) [edit]
max returns the greater of the given values (function template) [edit]
max_element returns the largest element in a range (function template) [edit]
min returns the smaller of the given values (function template) [edit]
min_element returns the smallest element in a range (function template) [edit]
minmax(C++11) returns the smaller and larger of two elements (function template) [edit]
minmax_element(C++11) returns the smallest and the largest elements in a range (function template) [edit]
lexicographical_compare returns true if one range is lexicographically less than another (function template) [edit]
next_permutation generates the next greater lexicographic permutation of a range of elements (function template) [edit]
prev_permutation generates the next smaller lexicographic permutation of a range of elements (function template) [edit]

[edit] Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 2114(P2167R3) C++98 contextual convertibility of return types to bool did notreflect the practice of implementations requirements corrected
LWG 3031 C++98 requirements on const values were insufficent requirements strengthened

[edit] See also