我面临一个应用程序,我必须设计一个具有随机访问(或至少比 O(n) 更好)的容器具有便宜的 (O(1)) 插入和删除,并根据顺序存储数据(等级) 在插入时指定。
例如,如果我有以下数组:
[2, 9, 10, 3, 4, 6]
我可以调用索引 2 上的 remove 来删除 10,我也可以通过插入 13 来调用索引 1 上的 insert。
在这两个操作之后,我将拥有:
[2, 13, 9, 3, 4, 6]
这些数字存储在一个序列中,插入/删除操作需要一个索引参数来指定应该在哪里插入数字或应该删除哪个数字。
我的问题是,除了链表和向量之外,什么样的数据结构可以维护这样的东西?我倾向于优先考虑下一个可用索引的堆。但我一直看到一些关于融合树有用的东西(但更多的是理论上的意义)。
什么样的数据结构可以给我最佳的运行时间,同时还能降低内存消耗?我一直在玩一个保留插入顺序的哈希表,但到目前为止它一直没有成功。
我直接使用 std:: 向量的原因是因为我必须构造一些东西,根据这些基本操作预先形成向量。容器的大小有可能增长到数十万个元素,因此在 std::vector 中进行转换是不可能的。与链表相同的问题(即使是双链表),在最坏的情况下遍历它到给定的索引将需要 O (n/2),它被舍入到 O (n)。
我正在考虑一个包含 Head、Tail 和 Middle 指针的双向链表,但我觉得不会好多少。