美文网首页
C++ STL lexicographical_compare

C++ STL lexicographical_compare

作者: book_02 | 来源:发表于2019-10-08 10:57 被阅读0次

说明

lexicographical_compare按照字典顺序来判断第一个范围的序列是否小于第二个范围的序列。

常用的函数原型有两种:

template< class InputIt1, class InputIt2 > 
bool lexicographical_compare( InputIt1 first1, InputIt1 last1,
                              InputIt2 first2, InputIt2 last2 );

template< class InputIt1, class InputIt2, class Compare >
bool lexicographical_compare( InputIt1 first1, InputIt1 last1,
                                        InputIt2 first2, InputIt2 last2,
                                        Compare comp );

第一种是用operator< 比较元素。第二种是用给定的二元比较函数comp来比较元素。

函数的前面四个参数分别用于指定两个序列的起止范围。

返回值:
若第一范围按字典顺序小于第二个则为 true ,否则为 false

关于按照字典顺序比较的说明

  1. 逐元素比较二个范围
  2. 首个不相等元素定义范围是否按字典序小于或大于另一个
  3. 若一个范围是另一个的前缀,则较短的范围小于另一个
  4. 若二个范围拥有等价元素和相同长度,则范围按字典序相等
  5. 空范围按字典序小于任何非空范围
  6. 二个空范围按字典序相等

头文件

#include <algorithm>

例子

#include <iostream>
#include <vector>
#include <algorithm>


int main()
{
    // v1 < v2
    std::vector<char> v1{ 'a', 'b', 'c', 'd' };
    std::vector<char> v2{ 'm', 'a', 'c' };

    if(std::lexicographical_compare(v1.begin(), v1.end(), v2.begin(), v2.end())) {
        for (auto c : v1) std::cout << c << ' ';
        std::cout << "< ";
        for (auto c : v2) std::cout << c << ' ';
        std::cout << '\n';
    }
    else {
        for (auto c : v1) std::cout << c << ' ';
        std::cout << ">= ";
        for (auto c : v2) std::cout << c << ' ';
        std::cout << '\n';
    }    

    // v3 >= v4
    std::vector<char> v3{ 'a', 'b', 'c', 'd' };
    std::vector<char> v4{ 'a', 'a', 'b', 'c', 'e' };
    if (std::lexicographical_compare(v3.begin(), v3.end(), v4.begin(), v4.end())) {
        for (auto c : v3) std::cout << c << ' ';
        std::cout << "< ";
        for (auto c : v4) std::cout << c << ' ';
        std::cout << '\n';
    }
    else {
        for (auto c : v3) std::cout << c << ' ';
        std::cout << ">= ";
        for (auto c : v4) std::cout << c << ' ';
        std::cout << '\n';
    }

    return 0;
}

结果:

a b c d < m a c
a b c d >= a a b c e

参考

https://zh.cppreference.com/w/cpp/algorithm/lexicographical_compare
http://www.cplusplus.com/reference/algorithm/lexicographical_compare/

相关文章

网友评论

      本文标题:C++ STL lexicographical_compare

      本文链接:https://www.haomeiwen.com/subject/olfbpctx.html