2014-01-11 32 views
0

我的ObjClass * obj有一個map<std::string, OtherClass*> obj2,我想獲得所有的密鑰,因爲我想迭代obj2的內容。獲取地圖的密鑰而不知道它的

我不能先驗地知道字符串包含什麼,所以我嘗試了這種方式,但沒有奏效。

typedef std::map<std::string, ObjClass2*>::iterator it_type;  
    for(it_type iterator = obj.begin(); iterator != obj.end(); iterator++) 
    { 
     std::cout<<iterator->first<<std::endl; 

    } 

也許我可以使用更多的整數索引嗎?但是如何?

+1

定義「不工作」的所有鍵。明確。 –

+1

爲什麼你需要所有的鑰匙?你能顯示一些代碼顯示這個嗎?您不需要鍵遍歷'obj2'。 – juanchopanza

回答

2

請檢查下面的代碼,你需要通過obj2的元素進行迭代:

typedef std::map<std::string, ObjClass2*>::iterator it_type;  
for(it_type iterator = obj->obj2.begin(); iterator != obj->obj2.end(); ++iterator) 
{ 
    std::cout<<iterator->first<<std::endl; 

} 
+0

我得到這個錯誤:錯誤:請求成員「開始」在「OBJ」,這是指針類型的「ObjClass *」(?也許你想用「 - >」) 我嘗試了用「改變 - >'運算符,但我得到另一個錯誤,告訴我,ObjClass不是成員'開始'和'結束'。 – user2369478

+0

@ user2369478 obj-> obj2.begin()表示您需要首先訪問obj的obj2成員,然後調用屬於obj2的開始/結束,而不是obj – vershov

+0

哦,對不起。我想說'請求會員'在'obj2'中開始'「 – user2369478

2

如果說OBJ具有類型ObjClass *那麼很明顯,這種結構

it_type iterator = obj.begin(); 

是無效的。

如果你需要得到的OBJ 2,你可以寫,例如下面的方式

for (const auto &p : obj->obj2) 
{ 
    std::cout << p.first << std::endl; 
} 
+0

沒有匹配函數調用'begin(ObjClass *&) – user2369478

+0

@ user2369478我不知道你正在測試什麼代碼。我顯示的代碼是正確的。 –

+0

@@ user2369478也許這句話在你的問題 「我ObjClass * OBJ有一個地圖<的std :: string,OtherClass *> OBJ 2」。我不明白,它是類ObjeClass,因爲我猜測包含地圖,而不是ObjClass * –