C++算法lexicographical_compare()函數用於檢查第一個範圍[first1,last1)在字典序上是否小於第二個範圍[first2,last2)。
第一個版本使用 operator< 比較元素,第二個版本使用給定的二進製比較函數 comp 比較元素。
字典比較是一種具有以下特性的操作:
- 比較是在兩個範圍內逐個元素進行的。
- 第一個不匹配的元素定義哪個範圍在字典上大於或小於另一個。
- 如果一個範圍是另一個範圍的前綴,則較短的範圍在字典序上比另一個範圍小。
- 如果兩個範圍包含等效元素且長度相同,則範圍在字典序上相等。
- 空範圍按字典順序小於任何其他非空範圍。
- 兩個空範圍在字典上是相等的。
用法
default (1) template <class InputIterator1, class InputIterator2>
bool lexicographical_compare (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2);
custom (2) template <class InputIterator1, class InputIterator2, class Compare>
bool lexicographical_compare (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2, Compare comp);
參數
first1:一個輸入迭代器,指向要比較的第一個範圍中的第一個元素的位置。
last1:一個輸入迭代器,指向要比較的第一個範圍中最後一個元素之後的位置。
first2:一個輸入迭代器,指向要比較的第二個範圍中第一個元素的位置。
last2:一個輸入迭代器,指向要比較的第二個範圍中最後一個元素之後的位置。
comp: 一個用戶定義的二元謂詞函數,它接受兩個參數,如果兩個參數按順序返回真,否則返回假。它遵循嚴格的弱排序來對元素進行排序。
返回值
如果第一個範圍按字典順序小於第二個範圍,則返回 true,否則返回 false。
複雜度
複雜性是線性的,最多對 comp 執行 2*min (count1, count2) 次比較。其中 count1 = last1- first1 和 count2 = last2 - first2。
異常
如果元素比較或迭代器拋出異常,則此函數將拋出異常。
請注意,無效參數會導致未定義的行為。
例子1
讓我們看一個簡單的例子來演示 lexicographical_compare() 的使用:
#include <iostream> // std::cout, std::boolalpha
#include <algorithm> // std::lexicographical_compare
#include <cctype> // std::tolower
using namespace std;
// a case-insensitive comparison function:
bool mycomp (char c1, char c2)
{ return tolower(c1)<tolower(c2); }
int main () {
char foo[]="Apple";
char bar[]="apartment";
cout << boolalpha;
cout << "Comparing foo and bar lexicographically (foo<bar):\n";
cout << "Using default comparison (operator<):";
cout << lexicographical_compare(foo,foo+5,bar,bar+9);
cout << '\n';
cout << "Using mycomp as comparison object:";
cout << lexicographical_compare(foo,foo+5,bar,bar+9,mycomp);
cout << '\n';
return 0;
}
輸出:
Comparing foo and bar lexicographically (foo
例子2
讓我們看另一個簡單的例子:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main(void) {
vector<string> v1 = {"One", "Two", "Three"};
vector<string> v2 = {"one", "two", "three"};
bool result;
result = lexicographical_compare(v1.begin(), v1.end(), v2.begin(), v2.end());
if (result == true)
cout << "v1 is less than v2." << endl;
v1[0] = "two";
result = lexicographical_compare(v1.begin(), v1.end(), v2.begin(), v2.end());
if (result == false)
cout << "v1 is not less than v2." << endl;
return 0;
}
輸出:
v1 is less than v2. v1 is not less than v2.
例子3
讓我們看另一個簡單的例子:
#include <algorithm>
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
vector<char> v1 {'a', 'b', 'c', 'd'};
vector<char> v2 {'a', 'b', 'c', 'd'};
srand(time(0));
while (!lexicographical_compare(v1.begin(), v1.end(),
v2.begin(), v2.end())) {
for (auto c:v1) cout << c << ' ';
cout << ">= ";
for (auto c:v2) cout << c << ' ';
cout << '\n';
random_shuffle(v1.begin(), v1.end());
random_shuffle(v2.begin(), v2.end());
}
for (auto c:v1) cout << c << ' ';
cout << "< ";
for (auto c:v2) cout << c << ' ';
cout << '\n';
return 0;
}
輸出:
a b c d >= a b c d d b c a >= d a c b a c b d >= a c b d c d a b >= b c d a d a c b >= c a b d a b c d < b d a c
示例 4
讓我們看一個簡單的例子:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
template <class X, class Y>
void compare_test(const X& x, const Y& y)
{
if (lexicographical_compare(x.begin(), x.end(), y.begin(), y.end())) {
cout << "x less than y" << endl;
}
else {
cout << "x not less than y" << endl;
}
if (lexicographical_compare(x.begin(), x.end(),
y.begin(), y.end(), greater<char>())) {
cout << "x less than y" << endl;
}
else {
cout << "x not less than y" << endl;
}
}
int main()
{
{
string x = "heilo";
string y = "hello";
cout << "same length string compare:" << endl;
compare_test(x, y);
}
cout << endl;
{
string x = "hell";
string y = "hello";
cout << "not same length string compare:" << endl;
compare_test(x, y);
}
return 0;
}
輸出:
same length string compare: x less than y x not less than y not same length string compare: x less than y x less than y
相關用法
- C++ Algorithm lower_bound()用法及代碼示例
- C++ Algorithm remove_if()用法及代碼示例
- C++ Algorithm remove()用法及代碼示例
- C++ Algorithm max_element()用法及代碼示例
- C++ Algorithm set_union()用法及代碼示例
- C++ Algorithm next_permutation()用法及代碼示例
- C++ Algorithm upper_bound()用法及代碼示例
- C++ Algorithm minmax()用法及代碼示例
- C++ Algorithm remove_copy_if()用法及代碼示例
- C++ Algorithm random_shuffle()用法及代碼示例
- C++ Algorithm pop_heap()用法及代碼示例
- C++ Algorithm replace()用法及代碼示例
- C++ Algorithm set_intersection()用法及代碼示例
- C++ Algorithm transform()用法及代碼示例
- C++ Algorithm set_difference()用法及代碼示例
- C++ Algorithm is_sorted()用法及代碼示例
- C++ Algorithm equal_range()用法及代碼示例
- C++ Algorithm minmax_element()用法及代碼示例
- C++ Algorithm stable_sort()用法及代碼示例
- C++ Algorithm min()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ Algorithm lexicographical_compare ()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。