Namespaces
Variants

C++ named requirements: Compare

From cppreference.com
 
 
C++ named requirements
 

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.

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.

Standard library

The following standard library facilities expect a Compare type.

collection of unique keys, sorted by keys
(class template) [edit]
collection of key-value pairs, sorted by keys, keys are unique
(class template) [edit]
collection of keys, sorted by keys
(class template) [edit]
collection of key-value pairs, sorted by keys
(class template) [edit]
adapts a container to provide priority queue
(class template) [edit]
sorts a range of elements
(function template & algorithm function object)[edit]
sorts the elements
(public member function of std::forward_list<T,Allocator>) [edit]
sorts the elements
(public member function of std::list<T,Allocator>) [edit]
sorts a range of elements while preserving relative order between equivalent elements
(function template & algorithm function object)[edit]
sorts the first N elements of a range
(function template & algorithm function object)[edit]
copies and partially sorts a range of elements
(function template & algorithm function object)[edit]
(C++11)
checks whether a range is sorted
(function template & algorithm function object)[edit]
finds the largest sorted subrange
(function template & algorithm function object)[edit]
finds the Nth element if the range were sorted
(function template & algorithm function object)[edit]
finds the first element not less than the given value using binary search
(function template & algorithm function object)[edit]
finds the first element greater than the given value using binary search
(function template & algorithm function object)[edit]
determines if an element exists in a range using binary search
(function template & algorithm function object)[edit]
finds the range of elements matching the given value using binary search
(function template & algorithm function object)[edit]
merges two sorted ranges
(function template & algorithm function object)[edit]
merges two sorted lists
(public member function of std::forward_list<T,Allocator>) [edit]
merges two sorted lists
(public member function of std::list<T,Allocator>) [edit]
merges two ordered ranges in-place
(function template & algorithm function object)[edit]
determines if one sequence is a subsequence of another
(function template & algorithm function object)[edit]
computes the difference between two sets
(function template & algorithm function object)[edit]
computes the intersection of two sets
(function template & algorithm function object)[edit]
computes the symmetric difference between two sets
(function template & algorithm function object)[edit]
computes the union of two sets
(function template & algorithm function object)[edit]
adds an element to a max heap
(function template & algorithm function object)[edit]
removes the largest element from a max heap
(function template & algorithm function object)[edit]
creates a max heap out of a range of elements
(function template & algorithm function object)[edit]
turns a max heap into a range of elements sorted in ascending order
(function template & algorithm function object)[edit]
(C++11)
checks if the given range is a max heap
(function template & algorithm function object)[edit]
finds the largest subrange that is a max heap
(function template & algorithm function object)[edit]
returns the greater of the given values
(function template & algorithm function object)[edit]
returns the largest element in a range
(function template & algorithm function object)[edit]
returns the smaller of the given values
(function template & algorithm function object)[edit]
returns the smallest element in a range
(function template & algorithm function object)[edit]
(C++11)
returns the smaller and larger of two elements
(function template & algorithm function object)[edit]
returns the smallest and the largest elements in a range
(function template & algorithm function object)[edit]
compares two ranges lexicographically
(function template & algorithm function object)[edit]
generates the next greater lexicographic permutation of a range of elements
(function template & algorithm function object)[edit]
generates the next smaller lexicographic permutation of a range of elements
(function template & algorithm function object)[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 not
reflect the practice of implementations
requirements corrected
LWG 3031 C++98 requirements on const values were insufficent requirements strengthened

See also

specifies that a relation imposes a strict weak ordering
(concept) [edit]
Comparison operators <, <=, >, >=, ==, !=, and <=> (C++20), compare the arguments