2011-09-01 50 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)分成不同的类别。