C++ 提高循环缓冲区或堆排序性能

C++ 提高循环缓冲区或堆排序性能,c++,sorting,boost,heap,circular-buffer,C++,Sorting,Boost,Heap,Circular Buffer,在处理之前,我需要对到达进程X的对象进行排序。 对象按时间戳(64位数字)排序。 当对象超时(几毫秒)并排序时,进程X开始查看它们。 大多数情况下,对象到达时已排序,在3%到5%之间,对象已无序 因此,我需要一个结构,允许我: -快速插入元素 -快速删除超时元素 就性能而言,对它们进行排序的最佳方法是什么? 我开始使用boost::circular\u buffer实现。 如果boost::heap更适合于此,我应该使用哪个boost::heap?因为有几个(斐波那契、二项式、优先级队列…) 我

在处理之前,我需要对到达进程X的对象进行排序。
对象按时间戳(64位数字)排序。
当对象超时(几毫秒)并排序时,进程X开始查看它们。
大多数情况下,对象到达时已排序,在3%到5%之间,对象已无序

因此,我需要一个结构,允许我:
-快速插入元素
-快速删除超时元素

就性能而言,对它们进行排序的最佳方法是什么?
我开始使用boost::circular\u buffer实现。
如果boost::heap更适合于此,我应该使用哪个boost::heap?因为有几个(斐波那契、二项式、优先级队列…)
我正在使用boost 1_49,但我也可以使用更新的版本。

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

但若要使用超时元素,则需要测量O(1)

,但我猜
std::priority_队列
很有可能是最有效的。使用任何其他堆都不会给您带来多大好处,因为您实际上不需要额外的操作(更改元素的优先级),但是能够使用这些操作会大大增加开销

特别是当
T
的大小稍大时,即使它只是一个
int
,您也可能希望使用d==8的d堆:尽管这会导致更多的比较,但它会减少对象移动的次数