我有一个图类,其中有两个std :: map;这些地图是私人的,我希望用户只能遍历两张地图,而不能修改它们。
重点是((第一点是我从来没有写过标准的迭代器)它们必须看起来像外面只有一张地图。
这样的代码如下:
for (auto element : stuff)
{
//do stuff
}
实际上会这样做:
for (auto element : map_1)
{
}
for (auto element : map_2)
{
}
我如何管理第一张地图和第二张地图之间的台阶?
答案 0 :(得分:1)
在您的自定义迭代器中,存储两个字段:
struct example {
unsigned map_index;
map_iterator it;
};
map_index
告诉您正在迭代哪个映射。
在递增it
之后的递增运算符中,如果it == map_0.end()
(我将编号从零开始更改),则递增map_index
并将it
设置为{{1} }。
使用map_1.begin()
作为结束迭代器。
在比较运算符中,首先比较{map_1.end(), 1}
,只有在索引匹配时才比较map_index
。
也就是说,您可以使用现有的通用功能来节省很多工作:boost::range::join