C++ map用于跟踪到达地图结尾的时间

xia*_*lin 1 c++ stl map

目前我有一张打印出以下内容的地图

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)

我怎样才能检查内部地图内的地图结尾?任何帮助将不胜感激谢谢

Jam*_*lis 9

更改输出行以首先打印逗号,并且仅当它不是第一个元素时:

if (inner != outer->second.begin())
    std::cout << ",";
std::cout << inner->first << "," << inner->second;
Run Code Online (Sandbox Code Playgroud)


Jer*_*fin 7

我将其改为使用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)