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