SGI

lexicographical_compare_3way

类别:算法 组件类型:函数

原型

template <class InputIterator1, class InputIterator2>
int lexicographical_compare_3way(InputIterator1 first1, InputIterator1 last1,
                                 InputIterator2 first2, InputIterator2 last2);

说明

Lexicographical_compare_3way本质上是标准 C 库中函数的概括strcmp如果范围[first1, last1)字面小于范围[first2, last2),则返回一个负数;如果[first2, last2)字面小于[first1, last1),则返回一个正数;如果两个范围都不字面小于另一个,则返回零。[1]

lexicographical_compare一样,字面比较意味着按“字典”(元素对元素)排序。也就是说,lexicographical_compare_3way如果返回一个负数*first1小于*first2,如果*first1大于*first2则返回一个正数。如果两个第一个元素相等[2],则lexicographical_compare_3way比较两个第二个元素,依此类推。Lexicographical_compare_3way仅当两个范围0[first1, last1)长度相同,并且第一个范围中的每个元素都与其在第二个范围中的对应元素相等时,才返回[first2, last2)

定义

在标准标头 algorithm 和非标准的后向兼容标头 algo.h 中定义。此函数是 SGI 扩展;它不是 C++ 标准的一部分。

类型要求

前提条件

复杂性

线性。最多2 * min(last1 - first1, last2 - first2)比较。

示例

int main()
{
  int A1[] = {3, 1, 4, 2, 8, 5, 7};
  int A2[] = {3, 1, 4, 1, 5, 9, 3};
  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);

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

  cout << "A1[] and A2[]: " << C12 << endl;
  cout << "A3[] and A4[]: " << C34 << endl;
}

注释

[1] Lexicographical_compare_3way几乎是(但并不完全是)多余的:调用lexicographical_compare_3way(f1,l1, f2,l2)可以写成lexicographical_compare(f1,l1, f2,l2) ? -1 : (lexicographical_compare(f2,l2, f1,l1) ? 1 : 0)。然而,对lexicographical_compare_3way的单次调用比对lexicographical_compare.

的两次调用快得多[2] “相等”,而不是“等于”,因为两个相等元素(也就是说,两个没有一个是小于另一个的元素)不一定等于。Operator<需要触发严格弱排序,而不一定是全排序。有关讨论,请参阅 LessThan Comparable 要求。

另请参阅

lexicographical_compare, 等于, 不匹配, 搜索, LessThan Comparable(可比较小于), Strict Weak Ordering(严格弱顺序)排序
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息