C ++遍历模板Map

时间:2011-12-07 09:43:46

标签: c++ templates map iterator

当我有一个包含模板地图的模板类和const_iteratortypedef下面的代码中声明的template<class K, class V> class template_map{ private: typedef typename std::map<K,V> TMap; TMap my_map; public: typedef typename TMap::const_iterator const_iterator; ... }; int main() { template_Map<int,double> Map1 //suppose that contains elements ? } 时,如何在类外迭代地图的元素,fe in main在输出上打印它们?

{{1}}

更新:可以在类外部使用typedef迭代器吗?如果是,以什么方式?

3 个答案:

答案 0 :(得分:4)

您需要在模板上定义将返回迭代器的成员函数:

template<class K, class V>
class template_map{

private:

typedef typename std::map<K,V> TMap;
TMap my_map;

public:
    typedef typename TMap::const_iterator const_iterator;
    const_iterator begin() const { return my_map.begin(); }
    const_iterator end() const   { return my_map.end(); }
};

然后:

int main()
{
    template_map<int, int> m;
    // Populate map...

    // Then iterate...
    for (auto i = m.begin(); i != m.end(); i++)
    {
    }
}

但是,我不确定您在此处添加std::map的内容,为什么不直接使用它?

答案 1 :(得分:1)

将begin()和end()成员添加到template_Map(const和非const变体)。

const_iterator begin() const {
    return my_map.begin();
}
const_iterator end() const {
    return my_map.end();
}
iterator begin() {
    return my_map.begin();
}
iterator end() {
    return my_map.end();
}

我为界面完整性添加了非const版本,在您的情况下可能不需要。 比主要:

typedef template_Map<x, y> template_MapXY;
template_MapXY Map1;
...
for ( template_MapXY::const_iterator it( Map1.begin() ), end( Map1.end() ); it != end; ++ it ) {
     ...
}

答案 2 :(得分:0)

我不明白为什么要将map类与另一个类包装起来。你为什么不std::map本身?

std::map上的迭代通常是这样做的:

for(std::map<mykey, myvalue>::iterator it = mymap.begin(); it != mymap.end(); ++it)
{
    somevar = it->first; // <<--- points to your key
    someothervar = it->second; // points to your value
}