当我有一个包含模板地图的模板类和const_iterator
在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;
...
};
int main()
{
template_Map<int,double> Map1 //suppose that contains elements
?
}
时,如何在类外迭代地图的元素,fe in main在输出上打印它们?
{{1}}
更新:可以在类外部使用typedef迭代器吗?如果是,以什么方式?
答案 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
}