通过std :: map中的std :: vector迭代

时间:2014-03-09 11:36:06

标签: c++ loops vector map iterator

感谢您对我的麻烦的帮助。我很绝望,觉得自己像个白痴,但显然我无法通过我的自我来理解。

我在地图中有一个矢量

map<string, vector<string>>SubjectsAndTeachers

我已经填写了如下数据:

[0] = {
  first = "OSY"
  second = size=1 {
    [0] = "lada"
      }
}
[1] = {
  first = "PA1"
  second = size=4 {
    [0] = " honza"
    [1] = "lada"
    [2] = "mirek  "
    [3] = "pepa"
      }
}
[2] = {
  first = "PA2"
  second = size=3 {
    [0] = " honza"
    [1] = "lada"
    [2] = "pepa"
}
        .
        .
        .
        .

它需要的是简单地,迭代所有这些以将它们打印到控制台中。到目前为止,我想出了:

for(map<string, vector<string> >::const_iterator it = SubjectsAndTeachers.begin();  it != SubjectsAndTeachers.end(); ++it)
{
    cout << it->first << ": ";
    for (vector<string>::const_iterator b = it->second.begin(); b != it->second.end() ;++it)
    {
        cout << *b;
    }
    cout << endl;
}

我想得到:

OSY : lada
PA1 : honza lada mirek pepa
     .
     .
     .
     .

但这似乎不起作用。

请有人帮忙吗?

2 个答案:

答案 0 :(得分:4)

你的第二个循环看起来很可疑:

for (vector<string>::const_iterator b = it->second.begin(); b != it->second.end() ;++it)
                                                                                   ^^^^

你当然是指++b ......

答案 1 :(得分:1)

为了简化任务,您可以使用基于范围的语句。例如

for ( const auto &p : SubjectsAndTeachers )
{
    cout << p.first << " :";
    for ( const auto &s : p.second )
    {
        cout << ' ' << s;
    }
    cout << endl;
}

至于你的代码,那么你在内循环中增加迭代器而不是迭代器b。