当前位置: 首页 > 知识库问答 >
问题:

更改优先级队列元素是否会导致重置队列?

燕智
2023-03-14

我有一个priority_queue,我想修改它的一些内容(优先级值),那么这个队列会被使用吗?

这取决于它是使用Push/Pop(更有可能,因为你只需要“插入”,而不是整个使用),还是访问top或Pop。

我很想更改队列中的一些元素。大概是这样的:

priority_queue<int> q;

int a=2,b=3,c=5;
int *ca=&a, *cb=&b, cc=&c;

q.push(a);
q.push(b);
q.push(c); //q is now {2,3,5}

*ca=4;

//what happens to q?
// 1) {3,4,5}
// 2) {4,2,5}
// 3) crash

共有1个答案

娄德运
2023-03-14

priority_queue复制推入其中的值。您在结尾处的分配对优先级队列的顺序和存储在队列中的值没有任何影响。

 类似资料:
  • 我在这个问题上发现了一些类似的问题,但我想再问一遍,以便得到一个更明确的答案。我正在编写一个图匹配算法,其中图上的每个节点分配给一个优先级集,取决于其邻居的匹配。细节其实并不重要,但我使用了std::priority_queue以便首先匹配最高优先级的节点。这里有一个棘手的问题:每次引入一个新的匹配,匹配节点的邻居的优先级将被更新。 我的问题自然是,如何更新新匹配的顺序?我能强制执行吗?或者是否有

  • 我正在尝试在滑动窗口中打印最大值。将窗口大小的元素,这里k=3放入优先级队列(Maxheap),然后查看值。”heap.Init(

  • 问题内容: 默认情况下,优先级队列的元素如何按照自然顺序排序,因为它没有实现可比的接口。 从文档中可以看出,元素是根据自然顺序进行排序的,但是我找不到任何关于equals方法或可比性的东西。它在内部如何发生? 所有实现的接口:可序列化,可迭代,集合,队列。 如果它实现可比性,那么为什么不在上一行说 例: 第三条打印语句也将打印[1、3、2、4],而不是打印[1、2、3、4]。为什么?应该自然排序吧

  • 一般来说,如果我理解正确的话,在给定列表和添加每个元素之间的“heapizing;o(n)”运行时是有区别的;o(lg n)。java遵循这种行为吗?如果不是,下面的问题可能无效。 下面的示例似乎创建了一个"min-heap"。 然而,假设我想构建一个“最大堆”,但是构造函数不允许我同时传入集合和比较器。在这种情况下,构建最大堆的唯一方法是创建一个实现可比的包装器类吗? 注意:我知道可以用比较器创

  • 这些天,我阅读了一些关于和的文档。我了解到Javascript是一个单线程,每次只会执行一段代码。同时,如果有事件发生,它会被推送到事件队列中并阻塞,直到适当的时间。我想知道,当许多事件被阻塞等待同时执行时。这些事件是否具有不同的优先级,因此高优先级事件会在低优先级事件之前执行。或者只是一个FIFO队列。 在上面的代码中,setTimeout fn1将在10 ms发生,Click事件处理程序fn2

  • 我正在寻找一种通过优先级和先到先服务(FCFS)调度线程的方法,如果两个线程具有相同的优先级。我在考虑使用一堆队列或类似的东西。问题是,即使我实现了自己的优先级队列,更改优先级的能力也会破坏插入到该队列的顺序。