是否有任何标准功能可以使用容器作为mapped_type 创建地图的扁平视图?

Mar*_*rkB 3 c++ c++20 std-ranges

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

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);
Run Code Online (Sandbox Code Playgroud)

注意:编写一个嵌套的 for 循环来迭代此结构很简单。

康桓瑋*_*康桓瑋 5

如果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;
Run Code Online (Sandbox Code Playgroud)

演示