在下面給出的代碼中,我試圖保留priority_queue中的一些值,以相應地對其鍵值存儲在「key」向量中進行排序。然後,我正在更改關鍵值以查看比較器是否正常工作。在這裏,當我將鍵[8]更改爲10時,值8正確更改其在隊列中的位置。但是當我將密鑰[2]更改爲-1時,它改變了它在隊列中的位置,但不正確。它應該位於隊列的頂部,因爲它的關鍵值是最小的,但事實並非如此。C++的priority_queue的修改比較器無法正常工作
是我寫比較器代碼的方式錯了嗎?或者,這是我不正確的事情?
我想知道正確的方式來修改優先級隊列的比較,如果我想按升序排序值相應的鍵值。
#include <bits/stdc++.h>
using namespace std;
vector <int> key(1000);
struct comp{
bool operator()(int a,int b)const{
return key[a]>key[b];
}
};
int main()
{
priority_queue <int,vector<int>,comp> q,temp;
for(int a=0;a<10;a++){
int n=rand()%16;
key[a]=n;
q.push(a);
}
while(!q.empty()){
temp=q;
while(!temp.empty()){
cout<< temp.top() << "(" << key[temp.top()] << ") ";
temp.pop();
}
cout<<endl<<endl;
int u,v;
cin>> u >> v;
key[u]=v;
}
return 0;
}
你在哪裏拿起可怕'的#include <位/ STDC + + H>'習慣?這是一個嚴肅的問題。直到一年前,初學者從未這樣做過。 –
提問時,最好不要在圖像中包含代碼。 – HDJEMAI
它會產生任何問題嗎?我實際上使用它來節省編程比賽期間的時間。 @Hackl –