当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ lexicographical_compare()用法及代码示例


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() 中的异常:如果元素比较或迭代器上的操作抛出异常,它就会抛出异常。如果参数无效,则会导致未定义的行为。



相关用法


注:本文由纯净天空筛选整理自佚名大神的英文原创作品 lexicographical_compare() in C++ STL。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。