【发布时间】:2016-03-19 02:17:36
【问题描述】:
我有一个包含一组整数的地图,如下所示:
std::map<int, std::set<int>> haha;
但是每个集合中的元素数量是未知的。现在我想迭代整个地图并将键和值打印到文件"f"。该怎么做?
【问题讨论】:
标签: c++ loops dictionary iteration
我有一个包含一组整数的地图,如下所示:
std::map<int, std::set<int>> haha;
但是每个集合中的元素数量是未知的。现在我想迭代整个地图并将键和值打印到文件"f"。该怎么做?
【问题讨论】:
标签: c++ loops dictionary iteration
for (std::map<int, std::set<int> >::const_iterator i = haha.begin(); i != haha.end(); ++i) {
int key = i->first;
const std::set<int>& values = i->second;
}
【讨论】:
我所知道的最简洁的方式(如果没有,请告诉我):
for(auto const& pair : haha)
{
std::cout << pair.first << " : ";
std::copy(pair.second.begin(), pair.second.end(), std::ostream_iterator(std::cout, " "));
std::cout << std::endl;
}
或完全使用 range-for 循环:
for(auto const& pair : haha)
{
std::cout << pair.first << " : ";
for(auto x : pair.second)
std::cout << x << " ";
std::cout << std::endl;
}
如果你想把它打印到一个文件中,只需创建std::ofstream 并用它的名字替换std::cout,因为这是C++,而不是C。我们不想看到fprintfs 在这个漂亮的代码。
【讨论】:
fprintf()”,您可以打开std::ofstream 并做同样的事情。
for (auto mapitr = haha.begin(); itr != haha.end(); ++mapitr) {
std::cout << mapitr->first << std::endl;
for (auto setItem: mapitr->second) {
std::cout << setitem << std::endl;
}
}
【讨论】: