用地图键循环地图

时间:2011-09-01 09:16:35

标签: c++ map

如何从地图中循环和打印所有内容,如:

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 个答案:

答案 0 :(得分:0)

使用C ++ 11 for-range-loop,您可以编写如下内容:

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>>)及其操作(例如:{{1} })进入单独的类。

相关问题