存储在最后n秒内获取的数据点的最佳数据结构是什么

时间:2015-07-20 16:31:59

标签: c++ vector data-structures deque

我需要一个数据结构(在C ++中),以存储在最后N秒内获取的(整数,双)对值。整数是相对毫秒的时间戳(保证是单调的),double是实际的数据样本。

约束:

  1. 每秒的点数不熟悉,但一旦应用程序启动,预计变化不大。典型值为每秒10点。

  2. 持续时间(即N秒)也不熟悉,并且可以在执行期间改变。但是当它被改变时,我可以刷新所有数据并重新开始。典型值为60秒。

  3. 在每次迭代中,一个新点被添加到集合的末尾,旧点(即当前时间的N秒以上)将从集合中删除。

  4. 我不需要快速随机访问,但需要快速插入(尾部)和删除(头部)。

  5. 我现在正在使用std :: deque,但我觉得在尾端添加点并从头端删除会导致频繁的重新分配。

    有没有标准的方法来做到这一点?或者我应该在std :: vector周围滚动我自己的'循环列表'包装?

2 个答案:

答案 0 :(得分:2)

对于“快速插入(尾部)和删除(头部)”,std::deque是最佳的,因为它在两端分别插入和删除O(1)。您也可以使用std::queue。标准库没有提供符合给定要求的更“高效”。

答案 1 :(得分:0)

您似乎可以使用circular buffer来提升。 在C ++ STL中没有等价物。

如果您不想依赖boost,请在std :: vector上自行实现一个非收缩的循环缓冲区,这并不难。