std::lexicographical_compare
|   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 ranges are lexicographically equal.
 
Contents | 
[edit] 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.  | |||||||||
[edit] Return value
true if the first range is lexicographically less than the second.
[edit] Complexity
At most 2·min(N1, N2) applications of the comparison operation, where N1 = std::distance(first1, last1) and N2 = std::distance(first2, last2).
[edit] Possible implementation
| 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); }  | 
[edit] Example
| This section is incomplete Reason: no example  |