2014-04-13 84 views
0

我有一個for循環,我需要循環不同類型的數組,第一個是map<string,vector<string>>和第二個是integer陣列。for循環與不同類型C++

實現這個我所做的:什麼,我試圖做

struct {map<string,vector<string>>::iterator it; int i; } s; 
int k = 0; 
for (s.it = m.begin(), s.i = 0; s.it != m.end(), s.i < size; s.i+=2) 
{ 
    while (k != integer_array[s.i] && k < size) 
    { 
      s.it++; 
     k++; 
    }  
    if (k == integer_array[s.i]) 
    { 
     cout << s.it.first << endl; // this line does not complie  
     k = 0; 
      s.it = m.begin(); 
    } 
} 

解釋: integer_array存儲索引以及我試圖打印在其存儲在integer_array指數映射值。 有什麼建議嗎?

+0

你目前的做法是否遇到一些問題? – herohuyongtao

+1

我猜'//這行不符合意味着「這行不能編譯」。如果我是對的,你能否給我們編譯器的錯誤信息? – paercebal

+1

使用逗號,您完全忽略第一個條件。你必須在邏輯上結合你的條件(可能'&&'是你想要的)。 – celtschk

回答

1

我想你的問題是在迭代器中。

相反的:

cout << s.it.first << endl; 

嘗試:

cout << s.it->first << endl; 

的原因是,一個STL迭代器的行爲就像一個指針:如果你要訪問的價值指向,則必須解除引用你的迭代器(通過運營商*或通過運營商 - >)。

在當前的情況下,指向的值是std :: pair和std :: vector的std :: pair,並且您想要打印第一個std :: string。因此,您需要編寫it->first

+0

哦!你是對的,我只是看到了,並改變了..大聲笑.. – Elior

+0

然後,你可以選擇我的答案爲「正確的答案」... :-) – paercebal

+0

不要擔心:-) – Elior