使用map键在map上循环

Loop over map with a map key

本文关键字:map 循环 键在 使用      更新时间:2023-10-16

如何循环打印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());

使用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>>)和它的操作(例如:print)包装成单独的类