簡體   English   中英

遍歷std :: map內部的std :: vector

[英]Iterate throught std::vector inside std::map

感謝您對我的麻煩的幫助。 我很絕望,覺得自己很白痴,但顯然我不能憑自己解決這個問題。

我在地圖內有一個向量

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
     .
     .
     .
     .

但這似乎不起作用。

請有人幫忙嗎?

您的第二個循環看起來可疑:

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

您當然是++b ...

為了簡化任務,您可以使用基於范圍的狀態表示。 例如

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

對於您的代碼,您可以在內部循環中而不是迭代器b中增加迭代器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM