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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。