获取内部STL容器的迭代器?

时间:2009-09-09 13:40:40

标签: stl iterator containers

我在尝试获取内部子容器的迭代器时遇到了麻烦。

基本上想象一下这个简化的代码:

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个内部容器,我需要遍历它们。

2 个答案:

答案 0 :(得分:3)

(注意,以下片段中没有编译任何内容。)

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

编辑:我正确理解您的评论,您想要了解内部地图的迭代器的类型。如果是这样,这是一种方式:

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

脱离我的头脑,这也应该有效:

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

答案 1 :(得分: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
    }
}