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

Iterator for 2 separated data structures

我有一个图表 class,其中有两个 std::map;地图是私有的,我希望用户只能循环浏览两个地图,而不能修改它们。

关键是,(第一点是我从来没有写过标准迭代器)他们必须看起来只有一张来自外部的地图。

这样代码看起来像:

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

实际上会这样做:

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

如何管理第一张地图和第二张地图之间的步骤?

在您的自定义迭代器中,存储两个字段:

struct example {
    unsigned map_index;
    map_iterator it;
};

map_index 告诉您正在迭代哪个地图。

在递增it后的递增运算符中,如果it == map_0.end()(我将编号更改为从零开始)则递增map_index并将it设置为map_1.begin().

使用 {map_1.end(), 1} 作为结束迭代器。

在比较运算符中,首先比较 map_index,如果索引匹配,则只比较 it


也就是说,您可以通过使用现有的通用功能为自己节省大量工作:boost::range::join