當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。