stlab.adobe.com Adobe Systems Incorporated

lexicographical_compare

algorithms.gif
function.gif
Category: algorithms Component type: function

Prototype

Lexicographical_compare is an overloaded name; there are actually two lexicographical_compare functions.

template <class InputIterator1, class InputIterator2>
bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1,
                             InputIterator2 first2, InputIterator2 last2);

template <class InputIterator1, class InputIterator2, class BinaryPredicate>
bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1,
                             InputIterator2 first2, InputIterator2 last2,
                             BinaryPredicate comp);

Description

Lexicographical_compare returns true if the range of elements [first1, last1) is lexicographically less than the range of elements [first2, last2), and false otherwise. Lexicographical comparison means "dictionary" (element-by-element) ordering. That is, [first1, last1) is less than [first2, last2) if *first1 is less than *first2, and greater if *first1 is greater than *first2. If the two first elements are equivalent then lexicographical_compare compares the two second elements, and so on. As with ordinary dictionary order, the first range is considered to be less than the second if every element in the first range is equal to the corresponding element in the second but the second contains more elements.

The two versions of lexicographical_compare differ in how they define whether one element is less than another. The first version compares objects using operator<, and the second compares objects using a functors comp.

Definition

Defined in the standard header algorithm, and in the nonstandard backward-compatibility header algo.h.

Requirements on types

For the first version:

  • InputIterator1 is a model of InputIterator.
  • InputIterator2 is a model of InputIterator.
  • InputIterator1's value type is a model of LessThanComparable.
  • InputIterator2's value type is a model of LessThanComparable.
  • If v1 is an object of InputIterator1's value type and v2 is an object of InputIterator2's value type, then both v1 < v2 and v2 < v1 are defined.

For the second version:

  • InputIterator1 is a model of InputIterator.
  • InputIterator2 is a model of InputIterator.
  • BinaryPredicate is a model of BinaryPredicate.
  • InputIterator1's value type is convertible to BinaryPredicate's first argument type and second argument type.
  • InputIterator2's value type is convertible to BinaryPredicate's first argument type and second argument type.

Preconditions

  • [first1, last1) is a valid range.
  • [first2, last2) is a valid range.

Complexity

Linear. At most 2 * min(last1 - first1, last2 - first2) comparisons.

Example

int main()
{
  int A1[] = {3, 1, 4, 1, 5, 9, 3};
  int A2[] = {3, 1, 4, 2, 8, 5, 7};
  int A3[] = {1, 2, 3, 4};
  int A4[] = {1, 2, 3, 4, 5};

  const int N1 = sizeof(A1) / sizeof(int);
  const int N2 = sizeof(A2) / sizeof(int);
  const int N3 = sizeof(A3) / sizeof(int);
  const int N4 = sizeof(A4) / sizeof(int);

  bool C12 = lexicographical_compare(A1, A1 + N1, A2, A2 + N2);
  bool C34 = lexicographical_compare(A3, A3 + N3, A4, A4 + N4);

  cout << "A1[] < A2[]: " << (C12 ? "true" : "false") << endl;
  cout << "A3[] < A4[]: " << (C34 ? "true" : "false") << endl;
}

Notes

See also

equal, mismatch, lexicographical_compare_3way, search, LessThanComparable, StrictWeakOrdering, sort

Copyright © 2006-2007 Adobe Systems Incorporated.

Use of this website signifies your agreement to the Terms of Use and Online Privacy Policy.

Search powered by Google