使用 Range-v3 过滤 group_by 输出的正确方法是什么?

What is the correct way of filtering the output of group_by with Range-v3?

以下代码无法编译,因为 x 无法与 std::vector<int> 进行比较,因为 x 是由 Range-v3 处理的更复杂的结构(这很好,因为它很懒惰,不像 std::vector<int>).

我如何编写过滤 lambda 来解决这个问题,可能不会强制将 x 不必要地转换为 std::vector<int>

#include <range/v3/view/filter.hpp>
#include <range/v3/view/group_by.hpp>
#include <vector>

int main() {
    std::vector<int> v{1,2,3,4,5};
    auto w = v
        | ranges::views::group_by([](auto const& c1, auto const& c2){ return c1 == 3 && c2 == 4; })
        | ranges::views::filter([](auto const& x){ return x != std::vector<int>{3,4}; });
}

您仍然可以将视图转换为矢量:

 | ranges::views::filter([](auto const& x){ return (x | ranges::to_vector) != std::vector<int>{3,4}; });

Demo

或不转换为矢量,使用 ranges::equal:

ranges::view::filter([](auto const& x){ return !ranges::equal(x, std::vector<int>{3,4}); })

Demo