使用 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}; });
}
以下代码无法编译,因为 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}; });
}