如何按字典顺序按相反顺序比较两个向量?

Sou*_*a B 2 c++ vector comparison-operators lexicographic-ordering std-ranges

如果我想按字典顺序比较两个向量,我可以这样做:

int main() {
    std::vector<int> a{0, 7, 8, 9};
    std::vector<int> b{1, 2, 3, 4};

    std::cout << std::boolalpha;
    std::cout << "a < b returns " << (a < b) << '\n';
}
Run Code Online (Sandbox Code Playgroud)

但是以相反的顺序执行相同的操作无法编译:

int main() {
    std::vector<int> a{3, 2, 1};
    std::vector<int> b{9, 8, 7, 6};

    std::cout << std::boolalpha;
    std::cout << "revrese a < reverse b returns " << ((a | std::views::reverse) < (b | std::views::reverse)) << '\n';
}
Run Code Online (Sandbox Code Playgroud)

后一个代码失败并显示:

<source>:23:81: error: no match for 'operator<' (operand types are 'std::ranges::reverse_view<std::ranges::ref_view<std::vector<int> > >' and 'std::ranges::reverse_view<std::ranges::ref_view<std::vector<int> > >')
   23 |     std::cout << "reverse a < reverse b returns " << ((a | std::views::reverse) < (b | std::views::reverse)) << '\n';
      |                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                          |                           |
      |                                                          reverse_view<[...]>         reverse_view<[...]>
Run Code Online (Sandbox Code Playgroud)

那么,如何正确实现这一目标呢?

我需要这个,因为我正在创建一个自定义大整数类。其中,我以小端顺序存储节点。现在,为了比较两个整数是否相等,我首先比较它们的大小。然后我需要按反向视图的字典顺序比较相同大小的向量。

use*_*522 7

operator<没有为std::views::reverse其他人定义。然而,标准库中有一个普通的算法作为它的普通函数模板:std::lexicographical_compare带有迭代器接口和std::ranges::lexicographical_compare带有范围接口。

std::cout << "revrese a < reverse b returns "
          << std::ranges::lexicographical_compare(a | std::views::reverse, b | std::views::reverse) 
          << '\n';
Run Code Online (Sandbox Code Playgroud)