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
我有一个图表 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