Data structures 如何实现可寻址FIFO队列?

Data structures 如何实现可寻址FIFO队列?,data-structures,Data Structures,我目前正在寻找一个包含所有O(1)操作的数据结构 插入(K,V):在队列末尾插入一个值 remove_key(K):从与提供的键对应的队列中移除值 remove_head():从队列前面移除值(最早的一个) 我能想到的唯一易于实现的方法是使用双链表作为主要数据结构,并在哈希表中保留指向列表节点的指针,这将获得所需的渐近行为,但是在实际运行时,这可能不是最有效的选择 我在文献中发现了“可寻址优先级队列”,但它们是相当复杂(甚至更昂贵)的数据结构,所以我想知道是否有人有更好的建议。到目前为止,似

我目前正在寻找一个包含所有O(1)操作的数据结构

  • 插入(K,V):在队列末尾插入一个值
  • remove_key(K):从与提供的键对应的队列中移除值
  • remove_head():从队列前面移除值(最早的一个)
我能想到的唯一易于实现的方法是使用双链表作为主要数据结构,并在哈希表中保留指向列表节点的指针,这将获得所需的渐近行为,但是在实际运行时,这可能不是最有效的选择


我在文献中发现了“可寻址优先级队列”,但它们是相当复杂(甚至更昂贵)的数据结构,所以我想知道是否有人有更好的建议。到目前为止,似乎还没有人为Rust实现类似的功能,这就是为什么我希望它不会变得太复杂。

我会使用
pub-struct-VecDeque
并使用
pop\u-front()
而不是
remove\u-head()


请参阅文档:

我在Python中实现了一个可寻址的二进制堆,没有第三方依赖项。

问题是
删除密钥(K)
。我可以使用一个(可增长的)环形缓冲区,比如
VecDeque
,但是
remove\u key(K)
将是
O(n)
,因为我必须在最坏的情况下迭代所有项。我只是想知道是否有更好的方法,因为否则我甚至可能使用FIFO队列,将元素标记为已删除,并使remove_head()跳过已删除的元素。您使用单独的哈希表的想法是标准实现。可寻址优先级队列使用相同的概念。如果您试图用二进制堆实现优先级队列,那么它会变得复杂。但是,如果你使用配对堆之类的东西,它不会比你的双链表想法更复杂。虽然有点晚了,但是如果有人仍然在寻找一个有效的解决方案,我在不久前写了以下的板条箱(不再积极维护它):