如何使用基于范围的 'for' 循环遍历不同类型的地图集合?

How to iterate through a collection of maps of different kinds using range based 'for' loops?

我可以按如下方式遍历地图:

std::map<int, std::string> intMap = { {1, "one"}, {2, "two"}, {3, "three"} };

for (const auto &[k, v]: intMap)
{
    doSomething(k, v);
}

我有另一个地图(不同类型和大小)定义如下:

std::map<float, std::string> floatMap = { {1.0, "one"}, {2.0, "two"}};

我也想为这张地图做同样的事情(doSomething(k, v) 已模板化)

for (const auto &[k, v]: floatMap)
{
    doSomething(k, v);
}

有没有一种方法可以通过遍历地图集合来对这两个地图执行此操作?

类似于:

for (const auto &map: {intMap, floatMap})
{
    for (const auto &[k, v]: map)
    {
        doSomething(k, v);
    }
}

然而,这给出了错误:

cannot deduce type of range in range-based 'for' loop

使用基于范围的 'for' 循环遍历一组地图(不同种类)的最简洁的方法 (> C++17) 是什么?

谢谢!

您可以使用折叠表达式展开立即调用的 lambda 来执行此操作:

[](const auto&... maps) {
  ([&] {
    for (const auto& [k, v] : maps)
      doSomething(k, v);
   }(), ...);
}(intMap, floatMap);

Demo.