如果sort(A.begin(),A.end(),greater())其中A是向量,则得到A的降序; if priority_queue,更大> Q;你得到Q的升序;我不知道为什么,很难记住何时使用>何时使用<在编写我的自定义操作符()时。这是我的测试代码:任何人都可以告诉他们如何排序?
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;
}
答案 0 :(得分:3)
让我们从另一个方向开始。使用<
对序列进行排序时,您将按升序获取元素。但是优先级队列是另一种方式,因为它的目的是为您提供最高优先级的元素。因此,如果您将优先级队列视为已排序的序列,则元素将从最高到最低,因为这是优先级队列的作用。当您使用>
时,普通序列最终从最高到最低排序,但是优先级队列,因为它以另一种方式排序,最终从最低到最高排序。
答案 1 :(得分:3)
不要将优先级队列视为已排序。只需将其视为一种抽象数据类型,它总能让您快速访问“最大元素”。其中“最大元素”被定义为包含优先级队列数据的列表中的最后一个元素,如果列表使用命令优先级队列的相同条件进行排序。
然后没有冲突。事实上,相同的比较器实际上不以不同的方式对不同的容器进行排序,因为优先级队列没有排序。它有一个订单,但没有排序。