0

if sort(A.begin(), A.end(), greater()) A がベクトルの場合、A の降順を取得します。priority_queue の場合、より大きい > Q。Q の昇順を取得します。理由がわかりません。また、カスタマイズした operator() を記述するときに、いつ > を使用するか、いつ < を使用するかを思い出すのが困難です。ここに私のテストコードがあります: 誰がどのようにソートされているか分かりますか?

struct compare_test{ //similar to greater() in STL
    bool operator()(const int a, const int b){ 
        return a>b;
    }
};    

void my_compare_test(){
vector<int> A;    
//  priority_queue<int,vector<int>, greater<int> > Q;         
priority_queue<int,vector<int>, compare_test > Q; 
for (int i = 0; i < 5; i++){
    A.push_back(i);
    Q.push(i);
}    
 // sort(A.begin(), A.end(), greater<int>());   
sort(A.begin(), A.end(), compare_test());   //get descending order
for (int i = 0; i < 5; i++){
    cout << "A = " << A[i] << "; "; 
}
cout << endl;
while(!Q.empty()){
    cout << "Q = " << Q.top() << "; ";  ////get ascending order
    Q.pop();
}
cout << endl;

}

4

2 に答える 2

3

逆に始めましょう。を使用してシーケンスをソートする<と、要素が昇順で取得されます。しかし、プライオリティキューはその逆です。その目的は、最も優先度の高い要素を提供することだからです。したがって、プライオリティ キューを並べ替えられたシーケンスと考えると、要素は最上位から最下位に移動します。これがプライオリティ キューの機能だからです。代わりに使用>すると、通常のシーケンスは最上位から最下位にソートされますが、プライオリティ キューは逆になるため、最下位から最上位にソートされます。

于 2013-05-22T22:50:59.617 に答える