std::lexicographical_compare
From Cppreference
Defined in header
<algorithm> | ||
template< class InputIterator1, class InputIterator2 >
bool lexicographical_compare( InputIterator1 first1, InputIterator1 last1, | (1) | |
template< class InputIterator1, class InputIterator2, class Compare >
bool lexicographical_compare( InputIterator1 first1, InputIterator1 last1, | (2) | |
Checks if the first range [first1, last1) is lexicographically less than the second range [first2, last2). The first version uses operator< to compare the elements, the second version uses the given comparison function comp.
Lexicographical comparison is a operation with the following properties:
- Two ranges are compared element by element.
- The first mismatching element defines which range is lexicographically less or greater than the other.
- If one range is a prefix of another, the shorter range is lexicographically less than the other.
- If two ranges have equivalent elements and are of the same length, then the ranges are lexicographically equal.
- An empty range is lexicographically less than any non-empty range.
- Two empty range- are lexicographically equal.
Contents |
Parameters
first1, last1 | - | the first range of elements to examine | |||||||||
first2, last2 | - | the second range of elements to examine | |||||||||
comp | - | comparison function which returns true if the first argument is less than the second. The signature of the comparison function should be equivalent to the following:
The signature does not need to have const &, but the function must not modify the objects passed to it. |
Return value
true if the first range is lexicographically less than the second.
Complexity
At most 2 * min(count1, count2) applications of the comparison operation, where count1 = std::distance(first1, last1) and count2 = std::distance(first2, last2).
Equivalent function
First version: |
---|
template<class InputIterator1, class InputIterator2> bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2) { for ( ; (first1 != last1) && (first2 != last2) ; first1++, first2++ ) { if (*first1 < *first2) return true; if (*first2 < *first1) return false; } return (first1 == last1) && (first2 != last2); } |
Second version: |
template<class InputIterator1, class InputIterator2, class Compare> bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp) { for ( ; (first1 != last1) && (first2 != last2) ; first1++, first2++ ) { if (comp(*first1, *first2)) return true; if (comp(*first2, *first1)) return false; } return (first1 == last1) && (first2 != last2); } |
Example
This section is incomplete |