目前我有一张打印出以下内容的地图
map<string, map<int,int> > mapper;
map<int,int>::iterator inner;
map<string, map<int,int> >::iterator outer;
for(outer = mapper.begin(); outer != mapper.end(); outer++){
cout<<outer->first<<": ";
for(inner = outer->second.begin(); inner != outer->second.end(); inner++){
cout<<inner->first<<","<<inner->second<<",";
}
}
Run Code Online (Sandbox Code Playgroud)
截至目前,这打印出以下内容
stringone: 1,2,3,4,6,7,8,
stringtwo: 3,5,6,7,
stringthree: 2,3,4,5,
Run Code Online (Sandbox Code Playgroud)
我想要打印出来的是
stringone: 1,2,3,4,6,7,8
stringtwo: 3,5,6,7
stringthree: 2,3,4,5
Run Code Online (Sandbox Code Playgroud)
我怎样才能检查内部地图内的地图结尾?任何帮助将不胜感激谢谢
更改输出行以首先打印逗号,并且仅当它不是第一个元素时:
if (inner != outer->second.begin())
std::cout << ",";
std::cout << inner->first << "," << inner->second;
Run Code Online (Sandbox Code Playgroud)
我将其改为使用std::copy,我将其与之一起使用infix_ostream_iterator.
编辑:我还记录了你正在做的事情看起来非常像一个std::multimap.如果您不想使用多图,它仍然看起来更简单的方式将是:
std::ostream &operator<<(std::ostream &os, std::vector<int> const &v) {
std::copy(v.begin(), v.end(),
infix_ostream_iterator<int>(os, ","));
return os;
}
std::map<std::string, std::vector<int> > mapper;
std::copy(mapper.begin(), mapper.end(),
std::ostream_iterator<std::vector<int> >(std::cout, "\n");
Run Code Online (Sandbox Code Playgroud)