c++ - 是否有任何标准功能可用于创建以容器为 mapped_type 的 map 的平面 View ?

标签 c++ c++20 std-ranges

是否有任何标准功能可以创建所有对的范围/ View ?以下代码说明了我要创建的 View :

std::unordered_map<std::string, std::vector<int>> m{{"Foo", {1,2}}, {"Hello", {4,5}}};
auto view = ???;
std::vector<std::pair<std::string, int>> v{view.begin(), view.end()};
std::vector<std::pair<std::string, int>> out1{{"Foo", 1}, {"Foo", 2}, {"Hello", 4}, {"Hello", 5}};
std::vector<std::pair<std::string, int>> out2{{"Hello", 4}, {"Hello", 5}, {"Foo", 1}, {"Foo", 2}};
assert(v == out1 || v == out2);

注意:编写一个嵌套的 for 循环来迭代这个结构是微不足道的。

最佳答案

如果C++23最终采用views::cartesian_product , 这是另一种方式

std::unordered_map<std::string, std::vector<int>> m{
   {"Foo", {1,2}}, {"Hello", {4,5}}};
auto view = m | views::transform([](auto& p) {
         return views::cartesian_product(views::single(p.first), p.second); })
              | views::join;

Demo

关于c++ - 是否有任何标准功能可用于创建以容器为 mapped_type 的 map 的平面 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72100838/

相关文章:

c++ - 错误 : member function may not be declared outside of its class.

c++ - 现代 C++ 与 clang-tidy 会导致相反的警告

c++ - 检查范围内的元素是否可以移动?

c++ - 为什么在 hana::中包装对按值返回的函数的调用总是规避 range::views::join 的要求?或者也许不是?

c++ - 函数采用对范围而不是 View 的转发引用是否有好处?

c++ - 为什么 C++23 范围适配器要求可调用对象是 copy_constructible?

c++ - 以有限的生命周期运行 .exe?

C++ 错误 : a storage class can only be specified for objects and functions struct

python - 为什么 blas 比 numpy 慢

c++ - 如何为带有接受模板参数的成员函数模板的类编写 C++ 概念?