用于2个分离的数据结构的迭代器

时间:2018-07-26 15:50:32

标签: c++ iterator stdmap

我有一个图类,其中有两个std :: map;这些地图是私人的,我希望用户只能遍历两张地图,而不能修改它们。

重点是((第一点是我从来没有写过标准的迭代器)它们必须看起来像外面只有一张地图。

这样的代码如下:

for (auto element : stuff)
    {
    //do stuff
    }

实际上会这样做:

for (auto element : map_1)
    {
    }
for (auto element : map_2)
    {
    }

我如何管理第一张地图和第二张地图之间的台阶?

1 个答案:

答案 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