C++ c++;范围视图
我正在寻找一个范围视图的实现,该视图惰性地创建给定范围的k个组合 例如,包含2个组合的范围C++ c++;范围视图,c++,algorithm,range,c++20,C++,Algorithm,Range,C++20,我正在寻找一个范围视图的实现,该视图惰性地创建给定范围的k个组合 例如,包含2个组合的范围{1,2,3}应返回: std::vector v {1,2,3}; auto rng = ranges::views::combinations<2>(v); for(auto[a,b] : rng) std::cout << a << ' ' << b << '\n'; // 1, 2 // 1, 3 // 2, 3 让“一切”变得懒惰
{1,2,3}
应返回:
std::vector v {1,2,3};
auto rng = ranges::views::combinations<2>(v);
for(auto[a,b] : rng)
std::cout << a << ' ' << b << '\n';
// 1, 2
// 1, 3
// 2, 3
让“一切”变得懒惰
完全未经测试的代码
auto lazycombo = [values, comb_size]() mutable {
bool ok = next_combination(values.begin(), values.begin() + comb_size, values.end());
return std::span(values.begin(), values.begin()+comb_size);
}
看
现在用你的
auto combinationIdx = ranges::views::generate(lazycombo);
这应该是generate\u n
,因为无法停止generate
,其中n
应该是可能的组合数。
.它必须是C++20的范围吗?如果是,可能会在你的问题中添加一个C++20标记。否则也有好的旧。ranges-v3也可以!疯狂的方法。但它是有效的!谢谢我根据您的回答更新了我的问题,并提供了有效的解决方案。非常感谢。