如何更新std :: Priority_queue中的元素
How to update elements inside an std::priority_queue?
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <stack>
#include <stdio.h>
#include <list>
#include <string.h>
#include <queue>
#include <algorithm>
#define pb push_back
using namespace std;
typedef pair<int,int> ii;
struct node{
int digit;
};
class Compare{
public:
bool operator()(node* a,node* b){
return (a->digit)>(b->digit);
}
};
int main()
{
priority_queue<node*,vector<node*>,Compare> pq;
vector<node*> vec;
node* p = new node();
node* q = new node();
node* r = new node();
p->digit=100;
q->digit=200;
r->digit=300;
pq.push(p);
pq.push(q);
pq.push(r);
q->digit=50;
pq.push(nod);
while(!pq.empty()){
cout<<(pq.top())->digit<<endl;
pq.pop();
}
return 0;
}
我在优先级队列中创建了一个优先级队列,并插入了3个节点(struct),然后我更改了队列中存在的中间元素的值,但无法弄清楚如何更新元素后更新优先级队列?
优先级队列旨在与固定优先级一起工作,即在插入时应知道元素优先级,然后保持相同。这就是为什么将元素推入队列时进行的所有比较。
如果您想要一个可以更改键的排序容器,请尝试std::multimap
。它将使您可以删除任何元素并将重新平衡。将其从begin()
到end()
将其访问您的node
s。
不幸的是,您仍然必须删除并插入元素以更改密钥,希望C 17会对它做些事情。
相关文章:
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- C++ queue.front();为什么不从第一个元素开始呢?
- 我可以擦除 std::queue 中间的节点吗?
- 获取大小时是否必须锁定 std::queue?
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- 销毁 std::queue 会导致内存错误
- 如何将一个 std::queue 的内容附加到另一个
- 使用元素加载 std::queue<uint8_t*> 的更有效方法?
- 为什么 std::queue 没有实现 insert() 而 std::d eque 实现了?
- 带有 std::vector 和 std::queue 的 Prim's 算法,我的代码有什么问题?
- C++程序在 #include 时无法编译<stack>,#include<queue>
- 是boost :: lockfree :: Queue(在多线程程序中)可锁定
- std :: queue :: pop()在其std :: unique_ptr数据上操作
- 通过 std::queue 中的元素的值获取元素的索引
- 如何索引指向数组 [queue] 的指针数组
- 像std::queue这样的c++标准库容器是否保证是可重入的
- 如何使用"priority"进行多线程处理?
- 在 boost::lockfree:queue 默认构造函数的情况下断言失败
- C++ Floating-Point van Emde Boas (vEB) Priority Queue