当我有一个包含模板映射的模板类和一个由const_iterator在以下代码中声明的typedef时,如何遍历该类外部的映射元素,例如在main中将其打印在输出上?

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

?
}

更新:是否可以在类外部使用typedef迭代器?如果可以,采用哪种方式?

最佳答案

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

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,为什么不按原样使用它呢?

09-06 20:06