将优先级队列推送到队列后,如何编辑该队列中的对象成员 我对C++还很陌生。一旦我已经将结构A推送到优先级队列上,我想修改变量“change”。这能做到吗? 这就是我尝试过的 pq.top().change = 200; //But it says this is only readable

将优先级队列推送到队列后,如何编辑该队列中的对象成员 我对C++还很陌生。一旦我已经将结构A推送到优先级队列上,我想修改变量“change”。这能做到吗? 这就是我尝试过的 pq.top().change = 200; //But it says this is only readable,c++,priority-queue,C++,Priority Queue,这就是我所拥有的: priority_queue<A, vector<A>, comparator> pq; struct A{ vector<B> list; int change = 0; }; 优先级队列pq; 结构A{ 向量表; int change=0; }; 任何指导都会有帮助。多谢各位 将优先级队列推送到队列后,如何编辑该队列中的对象成员 不能修改优先级队列中对象的不可变成员,因为top返回常量引用 您可以做的是复制top,

这就是我所拥有的:

priority_queue<A, vector<A>, comparator> pq;

struct A{
    vector<B> list;
    int change = 0;
};
优先级队列pq;
结构A{
向量表;
int change=0;
};
任何指导都会有帮助。多谢各位

将优先级队列推送到队列后,如何编辑该队列中的对象成员

不能修改优先级队列中对象的不可变成员,因为
top
返回常量引用

您可以做的是复制
top
,然后
pop
它,然后
push
修改后的副本


或者,您可以使用可变成员,但如果这样做,请记住
Compare
不能使用该成员。

在将队列中的内容添加到队列后,您真正想做的是更改它们的顺序吗?我认为top()返回一个迭代器。您需要取消引用。try*pq.top…项目在优先级队列中的位置由其值决定。更新此位置最安全、最简单的方法是将其弹出、更改,然后将其推回。@t例如您认为错误。不,这不是优先级队列的用途。无论您试图用它解决什么问题,要么它是错误的解决方案,要么优先级队列是错误的容器。我是否能够为优先级队列插入一个指针,并创建另一个指针,指向队列上的相同数据,所以我可以在队列之外编辑它?@JDoe4444只要你不接触
Compare
使用的任何数据,你当然可以这样做。