类别:算法 | 组件类型:函数 |
template <class InputIterator1, class InputIterator2> int lexicographical_compare_3way(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2);
与lexicographical_compare一样,字面比较意味着按“字典”(元素对元素)排序。也就是说,lexicographical_compare_3way如果返回一个负数*first1小于*first2,如果*first1大于*first2则返回一个正数。如果两个第一个元素相等[2],则lexicographical_compare_3way比较两个第二个元素,依此类推。Lexicographical_compare_3way仅当两个范围0和[first1, last1)长度相同,并且第一个范围中的每个元素都与其在第二个范围中的对应元素相等时,才返回[first2, last2)。
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 要求。