如何基于range-v3实现双Map交集视图并支持管道操作?
实现支持双Map键交集的Range View(获取双方对应值)
需求背景
- 有两个
std::map实例,二者包含部分共同键,但对应键的值不同 - 需要遍历两个Map的键交集(即同时存在于两个Map中的键),对每个共同键执行变换函数
f(key, value_in_map1, value_in_map2) - 要求通过Range View实现,支持后续管道式操作(如与
ranges::views::transform组合)
现有尝试与问题
尝试使用range-v3库中的ranges::views::set_intersection,但未达到预期效果:该视图仅返回第一个Map的键值对,无法同时获取两个Map中对应键的值,无法满足变换函数的参数需求。
更新记录
2024年1月5日
参考@fdan的建议,基于views::set_intersection进行扩展:继承set_intersection_cursor创建了set_intersection_return_both视图,使其返回两个迭代器对应的键值对。该视图在for循环和反向管道语法中可正常工作,但与ranges::views::transform的管道组合存在兼容问题。
2024年1月8日
深入研究zip_view的实现逻辑后,为视图添加了move函数与rvalue_type定义,并将视图重命名为set_intersection_zip,成功解决了与ranges::views::transform的管道兼容问题。
内容的提问来源于stack exchange,提问作者fcc
相关产品推荐
相关产品推荐

