📜  C++ STL 中的 lexicographical_compare()(1)

📅  最后修改于: 2023-12-03 14:59:45.347000             🧑  作者: Mango

C++ STL中的lexicographical_compare()

在C++ STL中,lexicographical_compare()是一种用于比较两个字符串或范围的函数。它在比较两个范围的元素时考虑字典排序,即按照字母顺序进行比较。本文将介绍这个函数的介绍、语法、参数、返回值和示例等方面的内容。

介绍

lexicographical_compare()函数用于比较两个范围内元素的字典顺序,用法与sort()和equal()等函数类似。它接受两个范围[first1, last1)和[first2, last2),并返回一个bool值,如果[first1, last1)的元素在字典上小于[first2, last2)的元素,则返回true,否则返回false。

语法

以下是lexicographical_compare()函数的语法:

template<class InputIterator1, class InputIterator2>
bool lexicographical_compare(
    InputIterator1 first1, InputIterator1 last1,
    InputIterator2 first2, InputIterator2 last2
);
参数

函数接受四个参数:

  • first1, last1:第一个范围的起始和结束迭代器。
  • first2, last2:第二个范围的起始和结束迭代器。
返回值

函数返回一个bool值,如果[first1, last1)的元素在字典上小于[first2, last2)的元素,则返回true,否则返回false。如果[first1, last1)是[first2, last2)的前缀,则返回true。如果两个范围完全相等,则返回false。

示例

下面是一个使用lexicographical_compare()函数的示例:

#include <iostream>
#include <algorithm>
#include <string>

int main()
{
    std::string s1 = "abcd";
    std::string s2 = "abdd";
    
    bool result1 = std::lexicographical_compare(s1.begin(), s1.end(), 
                                                s2.begin(), s2.end());
    bool result2 = std::lexicographical_compare(s1.begin(), s1.end(), 
                                                s2.begin(), s2.begin() + 2);
    
    if(result1)
    {
        std::cout << "s1 is less than s2 in lexicographical order" << std::endl;
    }
    else
    {
        std::cout << "s1 is greater than or equal to s2 in lexicographical order" << std::endl;
    }
    
    if(result2)
    {
        std::cout << "first two characters of s1 are less than s2" << std::endl;
    }
    else
    {
        std::cout << "first two characters of s1 are greater than or equal to s2" << std::endl;
    }
    
    return 0;
}

输出:

s1 is less than s2 in lexicographical order
first two characters of s1 are less than s2

在上面的示例中,我们首先定义了两个字符串s1和s2,并使用lexicographical_compare()函数比较它们之间的字典顺序。由于s1按字典顺序小于s2,所以第一个结果为true。在第二个比较中,我们只比较了s1和s2的前两个字符,并发现前两个字符比s2小,所以第二个结果为true。

总结:

使用lexicographical_compare()函数,我们可以轻松比较两个范围内的元素在字典上的顺序。它是C++ STL中非常有用的函数之一,具有简单易用的特点。