c++ - 使用 range-v3 将一个数字范围拆分为多个范围
问题描述
我在空间中有一定数量的点和一些四面体,对于每个点,我计算它在哪个四面体中。不在四面体中的点将被丢弃。
auto samplerIdAndCoarseTetra = mcSamplers
ranges::views::transform([&coarseAABBTree](const auto &mcSampler) {
return coarseAABBTree.any_intersected_primitive(mcSampler);
}) |
ranges::views::enumerate | ranges::views::filter([](const auto &tetrahedron) -> bool {
return std::get<1>(tetrahedron).has_value();
}) |
ranges::views::transform([&coarseResCGALTetrahedra](const auto &tetrahedron) {
return std::make_tuple(
std::get<0>(tetrahedron),
std::distance(std::begin(coarseResCGALTetrahedra), std::get<1>(tetrahedron).value()));
});
现在我有一个整数元组的范围(一个用于点的索引,一个用于四面体的索引)。一种可能的结果是这样的:
({0,4}, {1,4}, {3, 2}, {4,4},{4,2})
现在我想将 4 号四面体中的点与 2 号四面体中的点分开。我可以订购元组,所以我有
({0,4}, {1,4}, {4, 4}, {3,2},{4,2})
但我仍然将此范围分为 2 个范围
({0,4}, {1,4}, {4,4}), ({4,4}, {4,2})
是否可以仅使用范围-v3 来实现这一点?我知道有一个ranges::views::split
,但这会分裂一个值,这种情况看起来不同。
解决方案
你不想要split
,但是group_by
:
auto same_tetra = [](auto& lhs, auto& rhs){ return std::get<1>(lhs) == std::get<1>(rhs); };
// vec, your range of tuples.
auto groups = vec | ranges::view::group_by(same_tetra);
推荐阅读
- python - Scrapy-splash response.css() 无法获取元素
- c# - 如何使用 C# Lambda 表达式在 MongoDb 中执行全文搜索
- r - for 循环谷歌地理编码()但跳过相同的县以减少谷歌 API 查询
- encryption - 我们可以解码这个 base64 值吗
- python-3.x - 试图通过套接字获取 403 错误代码
- maven - build.xml 文件中的 maven 依赖项无法下载
- c# - 从网页获取生成的html
- c - 在 for 循环中管理 OpenMP 线程
- javascript - 使用 .env 文件在代理后面提供 create-react-app 提供白屏、错误和误报
- docker - 由于与 kubernetes api 的连接失败,coredns 在 crashloop