我需要一个数据结构(用C++)来存储在最近N秒内获取的(整数,双精度)值对。整数是相对毫秒时间戳(保证是单调的),double是实际的数据样本。什么是最近n秒内存储数据点的最佳数据结构
约束:
每秒的点数不事先已知,但预计不会一旦应用程序开始变化不大。典型值是每秒10点。
持续时间(即N秒)也不是已知的,可以在执行期间改变。但是当它改变时,我可以清除所有数据并重新开始。典型值是60秒。
在每次迭代中,将新的点添加到集合的末尾,旧点(即比当前时间早N秒)将从集合中移除。我不需要快速的随机访问,但快速插入(尾部)和删除(头部)。
我现在正在使用std :: deque,但我有一种感觉,在尾端添加点并从头端删除会导致频繁的重新分配。
有没有一个标准的方法来做到这一点?或者我应该将自己的“循环列表”包装器放在std :: vector中?
更好的尝试树。或列表。 – 2015-07-20 16:33:58
来自http://en.cppreference.com/w/cpp/container/deque; “在最后或开始时插入或删除元素 - 摊销常量O(1)”我不认为你会比这更好。重要的问题是你如何处理这些数据?例如,连续访问是重要的吗? – MagunRa
“我有一种感觉,在尾端添加点并从头端删除会导致频繁的重新分配” 您有感觉吗? 'deque'专门用于从末端快速插入和删除。 – rlbond