存储内部排序的地图元素的最快方法

时间:2013-03-30 19:32:36

标签: c++ algorithm

是否有任何有序容器允许O(n)按顺序删除和遍历?我正在尝试执行以下操作:

Hello  -> 1,2,3,4,5,6
Hello1 -> 24,15,13,10,8,7

我需要能够尽快从Hello或Hello1连续插入和删除。我正在考虑使用优先级队列,但每次我想要删除我花O(logn)调整,所以n次删除将花费我O(nlogn)时间来保持内部结构有序。是否有任何数据结构可以在O(n)时间内完成此任务?

1 个答案:

答案 0 :(得分:0)

只需使用std::vector,其中一些排序位于顶部;不要每次都使用std::sort - 使用合并排序。

复杂性很重要,但是当数据集较小时,内存分配和缓存未命中所花费的时间将远远超出此范围。一般来说,对它进行分析,但在这种情况下我会推测vector会没问题。

仔细考虑是否需要保持结构始终排序;你可以在诉诸之前插入一些物品吗? 2个向量和查找合并怎么样?仔细考虑你的算法;例如,您可以删除O(n)中的任意数量的项目。