是否有类似列表的结构允许插入任意索引,同时保持缓存效率?

时间:2015-10-06 18:13:14

标签: performance data-structures

向量具有良好的缓存效率(具有紧密索引的元素在内存中靠近放置),但对于任意位置的插入效率低。列表在任意位置插入O(1)(只要您知道该位置的地址),但它们具有可怕的缓存效率(元素在堆中随机分布)。

是否有任何数据结构在任何索引中插入O(1),以保持内存附近位置附近索引的元素?

3 个答案:

答案 0 :(得分:2)

在附近放置列表元素通常不是结构(矢量,列表)作业,而是分配器作业

  

元素在堆中随机分布

对于不在堆中随机分布的元素,必须使用池或固定大小的块分配

答案 1 :(得分:1)

您不能同时具有最坏情况的O(1)随机访问插入以及具有相似索引的元素的并置。如果具有相似索引的元素必须位于彼此的O(1)个单位内,那么您始终可以在相同位置插入足够的元素,以便下一个插入强制O(n)个其他元素的移动。实际上,为了强制至少一些移动而需要插入的元素数量是O(1)(因为近元素之间的间距也是如此)。

答案 2 :(得分:0)

查看std :: deque。它混合了矢量和列表的属性。我相信它像列表一样实现,但不是每个分配有一个节点,而是分配固定数量的节点。