C++ STL 提供了許多實用程序來解決基本的常見生活問題。比較值總是必要的,但有時我們也需要比較字符串。因此,lexicographical_compare()用於比較字符串。
它通常用於字典中按字母順序排列單詞;它需要連續比較兩個範圍中具有相同位置的元素,直到一個元素不等於另一個。字典順序比較是比較這些第一個不匹配組件的結果。該函數在 <algorithm> 標頭中定義。
Time complexity= 2 * min(N1, N2)
where N1 = std::distance(beg1, end1) and N2 = std::distance(beg2, end2).
它有以下兩種實現方式:
語法 1:
lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2)
模板:
template bool lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2) { while (beg1!=end1) { if (beg2==end2 || *beg2<*beg1) return false; else if (*beg1<*beg2) return true; ++beg1; ++beg2; } return (beg2!=end2); }
參數:
- beg1:將迭代器輸入到第一個序列的初始位置。
- end1:將迭代器輸入到第一個序列的最終位置。
- beg2:將迭代器輸入到第二個序列的初始位置。
- 結束2:輸入迭代器到第二個序列的最終位置。
返回值:如果 range1 按字典順序嚴格小於 range2,則返回布爾值 true,否則返回 false。
例子:
CPP
// C++ code to demonstrate the working of
// lexicographical_compare(), implementation 1
#include <algorithm>
#include <iostream>
using namespace std;
// Driver Code
int main()
{
// initializing char arrays
char one[] = "geeksforgeeks";
char two[] = "gfg";
// using lexicographical_compare for checking
// is "one" is less than "two"
if (lexicographical_compare(one, one + 13, two,
two + 3))
cout << "geeksforgeeks is lexicographically less "
"than gfg";
else
cout << "geeksforgeeks is not lexicographically "
"less than gfg";
}
輸出
geeksforgeeks is lexicographically less than gfg
語法 2:
lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2, Compare comp)
模板:
template bool lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2) { while (beg1!=end1) { if (beg2==end2 || *beg2<*beg1) return false; else if (*beg1<*beg2) return true; ++beg1; ++beg2; } return (beg2!=end2); }
參數:
- 求1:將迭代器輸入到第一個序列的初始位置。
- 結束1:將迭代器輸入到第一個序列的最終位置。
- 乞求2:將迭代器輸入到第二個序列的初始位置。
- 結束2:輸入迭代器到第二個序列的最終位置。
- comp:比較器函數返回每個比較元素的布爾值 true/false。該函數接受兩個參數。這可以是函數指針或函數對象,並且不能更改值。
返回值:如果 range1 按字典順序嚴格小於 range2,則返回布爾值 true,否則返回 false。
例子:
CPP
// C++ code to demonstrate the working of
// lexicographical_compare()
#include <algorithm>
#include <iostream>
using namespace std;
// helper function to convert all into lower case:
bool comp(char s1, char s2)
{
return tolower(s1) < tolower(s2);
}
// Driver Code
int main()
{
// initializing char arrays
char one[] = "geeksforgeeks";
char two[] = "Gfg";
// using lexicographical_compare for checking
// is "one" is less than "two"
// returns false as "g" has larger ASCII value than "G"
if (lexicographical_compare(one, one + 13, two,
two + 3))
cout << "geeksforgeeks is lexicographically less "
"than Gfg\n";
else
cout << "geeksforgeeks is not lexicographically "
"less than Gfg\n";
// using lexicographical_compare for checking
// is "one" is less than "two"
// returns true this time as all converted into
// lowercase
if (lexicographical_compare(one, one + 13, two, two + 3,
comp)) {
cout << "geeksforgeeks is lexicographically less ";
cout << "than Gfg( case-insensitive )";
}
else {
cout << "geeksforgeeks is not lexicographically "
"less ";
cout << "than Gfg( case-insensitive )";
}
}
輸出
geeksforgeeks is not lexicographically less than Gfg geeksforgeeks is lexicographically less than Gfg( case-insensitive )
應用:比較字符串一般可以用在字典中,我們需要按照字典順序放置單詞。一個例子是在給定的單詞集中查找字典中第一個出現的單詞。
CPP
輸出
The smallest string is : abacus
lexicographical_compare() 中的異常:如果元素比較或迭代器上的操作拋出異常,它就會拋出異常。如果參數無效,則會導致未定義的行為。
相關用法
- C++ lexicographical_compare()用法及代碼示例
- C++ lexicographical_compare用法及代碼示例
- C++ log()用法及代碼示例
- C++ lround()用法及代碼示例
- C++ llround()用法及代碼示例
- C++ lrint()用法及代碼示例
- C++ log10()用法及代碼示例
- C++ ldexp()用法及代碼示例
- C++ log2()用法及代碼示例
- C++ log1p()用法及代碼示例
- C++ logb()用法及代碼示例
- C++ llrint()用法及代碼示例
- C++ labs()用法及代碼示例
- C++ ldiv()用法及代碼示例
- C++ llabs()用法及代碼示例
- C++ lldiv()用法及代碼示例
- C++ localeconv()用法及代碼示例
- C++ longjmp() and setjmp()用法及代碼示例
- C++ localtime()用法及代碼示例
- C++ list assign()用法及代碼示例
- C++ list back()用法及代碼示例
- C++ list emplace()用法及代碼示例
- C++ list empty()用法及代碼示例
- C++ list end()用法及代碼示例
- C++ list erase()用法及代碼示例
注:本文由純淨天空篩選整理自佚名大神的英文原創作品 lexicographical_compare() in C++ STL。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。