2011-09-01 86 views
0

我怎麼能循環,並從地圖打印一切都像:遍歷地圖與地圖鍵

map<map<string, int>, map<string, std::vector<int> > > 

我想是這樣的:

ostringstream man2; 
man2 << "$$$ -> man2, [nmarcu]:TO BE DELETED - test if IPSecAlarmsMap fill correct" << endl; 
map<map<string, int>, map<string, std::vector<int> > >::iterator; 
for(iterAlarmsMap = IPSecAlarmsMap.begin(); iterAlarmsMap != IPSecAlarmsMap.end(); iterAlarmsMap++) { 
    map<string, int>::iterator; 
    for(iterMsgMap = iterAlarmsMap->first.begin(); iterMsgMap != iterAlarmsMap->first.end(); iterMsgMap++) { 
     man2 << "Message: " << iterMsgMap->first << "tunnelId: " << iterMsgMap->second << endl; 
    } 
    map<string, std::vector<int> >::iterator; 
    for(iterTunnelConn = iterAlarmsMap->second.begin(); iterTunnelConn != iterAlarmsMap->second.end(); iterTunnelConn++) { 
     man2 << " Tunnel IP: " << iterTunnelConn->first << endl; 
     std::vector<int>::iterator iterConnVec; 
     for (iterConnVec = iterTunnelConn->second.begin(); iterConnVec!=iterTunnelConn->second.end(); iterConnVec++) { 
      man2 << "  Conn= "<< *iterConnVec << endl; 
     } 
    } 
} 
trace(man2.str()); 
+1

當你這樣嘗試時發生了什麼?這段代碼不會順便編譯。 – hamstergene

+1

你能告訴我們問題是什麼嗎?我們不是在這裏爲你分析你的代碼。 –

+0

你的地圖是否存在?你如何比較關鍵值?你可以插入[漂亮的打印機](http://stackoverflow.com/questions/4850473/pretty-print-c-stl-containers),它應該可以開箱即用。 –

回答

0

用C++ 11-範圍 - 循環,你可以寫這樣的事情:

map<map<string, int>, map<string, std::vector<int>>> original_map; 
for (auto& submap_pair : original_map) { 
    for (auto& item_pair : submap_pair.first) { 
    print(item_pair.first); // Print the string 
    print(item_pair.second); // Print the int 
    } 
    for (auto& item_pair : submap_pair.second) { 
    print(item_pair.first); // Print the string 
    for (auto& vectItem : item_pair.second) { // Traverse through the vector 
     print(vectItem); 
    } 
    } 
} 

不知道自己在做什麼,但如果我在我的代碼有這個地圖,我想包的子圖(map<string,int>map<string,vector<int>>)及其操作(例如:print)分成不同的類別。