2009-09-09 66 views
0

我在嘗試獲取內部子容器的迭代器時遇到了問題。獲取內部STL容器的迭代器?

基本上想象這種簡化代碼:

typedef map<string, map<string, map> > double_map; 

double_map dm; 
.. //some code here 

for(double_map::iterator it = dm.begin(); it != dm.end(); it++){ 
    //some code here 
    it->first // string 
    it->second // <---- this is the 2nd map, how do i get its iterator so I can wrap it 
         //in a for loop like above? 
} 

我需要能夠做到這一點,而不使用的typedef爲每一個內膽,有沒有辦法讓內部容器的迭代器?我有4個內部容器的結構,我需要遍歷它們。

回答

3

(請注意,沒有在下面的代碼片段編譯。)

for(double_map::iterator it = dm.begin(); it != dm.end(); it++){ 
    //some code here 
    it->first; // string 
    it->second.begin(); 
    it->second.end(); 
} 

編輯:我FI瞭解您的評論正確的,你想在型內圖的迭代器。如果是這樣的話,這裏有一個方法:

double_map::mapped_type::iterator inner_iter = it->second.begin(); 

關閉我的頭頂,這應該工作,太:

double_map::value_type::second_type::iterator inner_iter = it->second.begin(); 
+0

對不起,這不是我的意思,我的意思是我需要將這些迭代器存儲在inner_type :: iterator中it2 = it-> second.begin() 然後循環使用這些迭代器 – 2009-09-09 13:59:01

+0

這就是它!爲什麼我沒有想到mapped_type和value_type,是完美的,這是我需要的。謝謝! – 2009-09-09 14:42:23

+0

但是,當有子容器3或4級深我猜你必須做double_map :: mapped_type :: mapped_type :: mapped_type嗯,幸運的是我有一個typedef中途通過 – 2009-09-09 14:46:01

1

簡單:

typedef map<string, map> inner_map; //Typedef for readability 
typedef map<string, inner_map > double_map; 

double_map dm; 
.. //some code here 
for(double_map::iterator it = dm.begin(); it != dm.end(); it++){ 
    //some code here 
    it->first // string 
    inner_map &innerMap(it->second); //Reference to the inner map for readability 
    for(inner_map::iterator it2 = innerMap.begin(); it2 != innerMap.end(); ++it2) { 
     //Do whatever you like 
    } 
} 
+0

這是我的後備選擇,但有幾個層次的子容器,我想保持它的一般性,而不使用每個子容器的typedefs。 基本上我試圖做到沒有typedef – 2009-09-09 14:00:10