c – 我可以使用迭代器访问优先级队列的元素吗?

矢量和链接列表

向量以串行方式存储在存储器中,因此可以使用运算符[]访问任何元素,就像在数组中一样.

链表包含可能不会连续存储在内存中的元素,因此必须使用迭代器通过以下指针访问随机元素.

(你可能已经知道了.)

优先级的优势

最近我发现了’优先级队列’,它的工作方式类似于堆栈,但是元素是push() – ed到容器中,并且这个函数根据与运算符<的比较将它们按顺序放置,我相信. 这非常适合我,因为我正在测试事件并根据它们发生的剩余时间将它们放入队列中.当我推送()和pop()元素时,队列会自动为它们排序. (弹出不会影响顺序.)我可以写一个运算符<所以这不是问题. 我无法解决的问题 我需要对此事件队列执行三项操作: 1 :)在事件队列中搜索项目.我假设这可以通过标准库中的算法来完成?例如,’找’?如果不是,我可以自己实施,只要我可以做第2点.(见下文) 2 :)迭代队列.我认为认的底层容器是std :: vector …有没有办法访问底层向量中的随机元素?如果我选择使用std :: deque怎么办?我需要这样做来修改某些事件参数. (事件放在队列中.)例如,我可能需要处理一个事件,然后从每个剩余事件的’time_to_event’参数中减去一段恒定的时间.我怀疑由于这个question不能做到这一点.

3 :)从队列中删除一个元素.有时在处理事件时,其他事件会失效,因此需要删除.

点1-3可以完成吗?我在std :: priority_queue上的所有信息都来自cplusplus.com,所以我的认答案是“不”,没有办法做任何这些事情.如果我不能做所有这三件事,那么我想我必须编写自己的Priority Queue包装器. (哦,无聊)

解决方法

不,你不能迭代std :: priority_queue中的项目.它支持的只是插入项目,并删除优先级最高的项目.

当您需要更多灵活性时,您可能希望使用std :: make_heap将堆结构构建到容器中,使用std :: push_heap来添加项,使用std :: pop_heap来删除项.

由于这些是您应用于容器的算法,因此您仍然可以根据需要使用容器的迭代器.根据您修改堆中数据的方式,您可能需要在之后重新构建堆 – 如果您以不再应用堆属性的方式对其进行修改.如果您有任何疑问,可以使用std :: is_heap进行测试.

除此之外:我们中的许多人发现http://www.cppreference.com比您链接的网站更有用和准确.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...