アイデアは、最初のラウンドを繰り返してマップのキーを印刷し、次に各ベクトルを調べて、要素があれば1つずつ印刷することです。
void func()
{
std::map<std::string, std::vector<int> > m;
m["AA"] = {1, 2, 3, 1, 2, 1, 2, 3};
m["BB"] = {2, 3, 4, 1, 2, 3, 4, 5, 5 };
m["CC"] = {2, 3, 4, 1, 2, 3, 4, 5};
size_t size = 0;
for (auto item = m.begin(); item != m.end(); ++item)
{
std::cout << item->first << '\t';
if (size < item->second.size())
{
size = item->second.size();
}
}
std::cout << std::endl;
for (size_t i = 0; i< size; i++)
{
for (auto item = m.begin(); item != m.end(); ++item)
{
if (i < item->second.size())
{
std::cout << item->second.at(i) << '\t';
}
}
std::cout << std::endl;
}
}
すべてのベクトルのサイズが同じである場合は、サイズチェックを無視し、[]演算子を使用して速度を上げることができます。
for (size_t i = 0; i< size; i++)
{
for (auto item = m.begin(); item != m.end(); ++item)
{
std::cout << item->second[i] << '\t';
}
std::cout << std::endl;
}
サンプルコードのリンクを参照して、お楽しみください