【发布时间】:2020-03-22 14:00:47
【问题描述】:
我有带有时间戳的对象,比如说:
class data_point
{
public:
data_point(time_t _ts, char _data):timestamp(_ts), data(_data) {}
time_t timestamp;
char data;
}
假设您有 N 个这些数据点的集合。对于每个集合,您都知道它们是按时间顺序排列的。我想要做的是遍历这些集合,这样我将为每个 data_point 获得一次回调,但顺序正确。基本上,我正在寻找一种可以使用 N 个集合初始化的数据结构,并返回一个迭代器,该迭代器将允许通过它们选择具有“最低”时间戳的下一个项目,优先考虑首先添加到集合中的集合。理想情况下,代码可能如下所示:
std::vector<data_point> a1 = { data_point(1, 'a'), data_point(6, 'b'), data_point(11, 'c') };
std::vector<data_point> a2 = { data_point(1, 'd'), data_point(8, 'e'), data_point(12, 'f') };
std::vector<data_point> a3 = { data_point(1, 'g'), data_point(9, 'h'), data_point(11, 'i') };
SomeCollection c = { a1, a2, a3 };
// or possibly if needed
// SomeCollection c; c.add(a1); c.add(a2); c.add(a3);
for(auto &d: c)
{
std::cout << d.data << std::endl;
}
哪个会输出:
a
d
g
b
e
h
c
i
f
我可以编写自己的类,但想知道是否已经存在类似的东西。
【问题讨论】:
-
保持N个集合不变的意图?或者您只是想按顺序访问它们的值以进行(例如)打印?
-
是的,保留初始集合,但有一个将它们视为队列的迭代器,其中 ++ 将您移动到具有最低队列的所有集合中的下一个项目。
-
输入是否保证有序?
-
@Caleth - 是的,假设每个集合,在这种情况下是一个向量,已经有序。理想情况下,这也适用于其他集合。
标签: c++ for-loop templates iterator