堆似乎非常合适,看起来你错了.
假设您想要前x个元素(这个x与n相比如何,顺便说一下?)
你正在做的是将所有进入最大堆并获得顶部x.
我建议你使用精确x个元素的最小堆.
您插入堆中的第一个x元素.
下一个传入元素,您可以与堆中的min进行比较,该min可以非常快速地完成(O(1)时间).如果更小,则只需忽略传入元素.
如果传入元素大于min,则将min增加到传入元素并在堆中将其向下移动.这应该是最差的logx时间.
完成后(在nlogx时间内),您可以在O(xlogx)时间内按排序顺序检索堆中的元素.
根据您的数据的方式(以及x的小小),使用这种最小堆解决方案可能非常快.
如果你真的真的希望插件超快并且不太关心检索,那么你也可以做以下事情.
按照它们的顺序将元素插入到矢量(具有分摊的O(1)插入时间的数组中).
使用Selection算法查找第x个最大元素(在O(n)时间内,但常量可能很大).说这个数字是S.
现在遍历数组,将每个元素与S进行比较,并选择与S一样大的数组.
如果x的大小合理且与n相当(如n / 2或其他东西),这可能会很好,但如果x比n小,我建议使用min-heap.