#include
#include
using namespace std;
struct Node{
Node(int s,int c)
{
x=s;
y=c;
}
int x;
int y;
};
bool operator<(Node a,Node b){
return a.xint main(){
Node d(3,2);
priority_queue temp;
temp.push(d);
temp.pop();
d=temp.top();
cout<
返回来的结果是3,
怎么会有数据的,各位专家们解答一下
这是一个非常好的问题,我以前没有接触过。
事实上,你先执行了一次push()再执行了一次pop(),这都是有效操作。你可以加入temp.empty()佐证你的判断。遗憾的是,pop()后top()获得了意外的结果。
你可以试试,当你在push()前就top(),程序会异常终止的,也就是说这并不是正确的操作。
之所以能得到这样的结果,可能是由于底层并未真正删除该元素,只是做了标记,意外地被你的访问获取到了,属于不可预知的意外情况。
严谨正确的写法应该是,在pop()和top()操作前,都先判断一下是否temp.empty()。
参考资料也推荐给你:https://stackoverflow.com/questions/54368314/c-behavior-of-priority-queue-pop-and-top-when-queue-is-empty
如果我的回答对你有帮助,还望采纳!