向量和链表
向量串行存储在内存中,因此可以使用 访问任何元素operator[]
,就像在数组中一样。
链表包含的元素可能不会连续存储在内存中,因此必须使用迭代器通过跟随指针访问随机元素。
(你可能已经知道了。)
优先队列的优势
最近我发现了“优先队列”,它的工作原理有点像堆栈,但元素被-ed 放入容器中,我相信push()
,这个函数根据与 的比较将它们按顺序排列。operator<
这非常适合我,因为我正在测试事件并根据它们发生之前的剩余时间将它们放入队列中。队列会自动为我将它们排序为 Ipush()
和pop()
元素。(弹出不影响顺序。)我可以写一个operator<
所以这不是问题。
我无法解决的问题
我需要用这个事件队列做三件事:
1:) 在事件队列中搜索一个项目。我假设这可以通过标准库中的算法来完成?例如,“找到”?如果不是,我可以自己实现一个,前提是我可以做到第 2 点。(见下文)
2 :) 遍历队列。我认为默认的底层容器是std::vector
......有没有办法访问底层向量中的随机元素?如果我选择std::deque
改用怎么办?我需要这样做来修改某些事件参数。(事件被放置在队列中。)例如,我可能需要处理一个事件,然后从每个剩余事件的“time_to_event”参数中减去一个恒定的时间量。我怀疑由于这个问题而无法做到这一点。
3:) 从队列中删除一个元素。有时在处理事件时,其他事件变得无效,因此需要删除。
1-3点能做到吗?我所掌握的所有信息std::priority_queue
都来自cplusplus.com,所以我的默认答案是“否”,没有办法做任何这些事情。如果我不能同时做这三件事,那么我想我将不得不编写自己的优先级队列包装器。(哦无聊)