提升circular_buffer或堆排序性能

时间:2013-11-23 22:24:28

标签: c++ sorting boost heap circular-buffer

我需要在处理它们之前对到达过程X的对象进行排序 对象被分类为时间戳 - 64位数字 当对象超时(几毫米)并排序时,过程X开始查看它们 大多数情况下,对象到达排序,在3%到5%之间,对象出现故障。

所以我需要一个允许我的结构:
   - 快速插入元素
   - 快速删除超时元素

在绩效方面,最好对它们进行排序? 我开始用boost :: circular_buffer实现。
如果boost :: heap对此更好,我应该使用boost :: heap吗?因为有一些(斐波纳契,二项式,优先级队列......)
我正在使用boost 1_49,但我也可以使用更新的版本。

使用循环缓冲区,我将大部分元素插入缓冲区的开头。但在某些情况下它可能是O(n) 但要采取超时元素,它是O(1)

1 个答案:

答案 0 :(得分:2)

你需要衡量,但我猜想std::priority_queue<T>有一个公平的机会来提高效率。使用任何其他堆都不会对您有好处,因为您不需要额外的操作(更改元素的优先级),但能够使用这些操作会显着增加开销。

特别是当T的大小稍大但即使它只是int时,您可能希望使用 d -heap与 d == 8 :虽然这会导致更多的比较,但它会减少对象移动的次数。