use*_*501 7 c++ priority-queue c++11
向量以串行方式存储在存储器中,因此可以使用数据库访问任何元素operator[]
,就像在数组中一样.
链表包含可能不会连续存储在内存中的元素,因此必须使用迭代器通过以下指针访问随机元素.
(你可能已经知道了.)
最近我发现了'优先级队列',它有点像堆栈,但是元素被push()
装入容器中operator<
,我相信这个功能根据与之比较的顺序将它们放在一个顺序中.
这非常适合我,因为我正在测试事件并根据它们发生的剩余时间将它们放入队列中.队列会自动按照我push()
和pop()
元素对它进行排序.(弹出不影响顺序.)我可以写一个operator<
所以这不是问题.
我需要对此事件队列执行三项操作:
1 :)在事件队列中搜索项目.我假设这可以通过标准库中的算法来完成?例如,'找'?如果不是,我可以自己实施,只要我可以做第2点.(见下文)
2 :)迭代队列.我认为默认的底层容器是std::vector
......有没有办法访问底层向量中的随机元素?如果我选择使用该std::deque
怎么办?我需要这样做来修改某些事件参数.(事件放在队列中.)例如,我可能需要处理一个事件,然后从每个剩余事件的'time_to_event'参数中减去一个恒定的时间.我怀疑由于这个问题不能做到这一点.
3 :)从队列中删除一个元素.有时在处理事件时,其他事件会失效,因此需要删除.
点1-3可以完成吗?我所拥有的所有信息std::priority_queue
都来自cplusplus.com,所以我的默认答案是"不",没有办法做任何这些事情.如果我不能做所有这三件事,那么我想我将不得不编写自己的优先级队列包装器.(哦很无聊)
不,你不能迭代一个项目std::priority_queue
.它支持的只是插入项目,并删除最高优先级的项目.
当您需要更多灵活性时,您可能希望使用std::make_heap
将堆结构构建到容器中,std::push_heap
添加项目以及std::pop_heap
删除项目.
由于这些是您应用于容器的算法,因此您仍然可以根据需要使用容器的迭代器.根据您在堆中修改数据的方式,您可能需要在之后重新构建堆 - 如果您以不再应用堆属性的方式对其进行修改.std::is_heap
如果您有任何疑问,可以测试一下.
除此之外:我们中的许多人发现http://www.cppreference.com比您链接的网站更有用和准确.
归档时间: |
|
查看次数: |
9560 次 |
最近记录: |