优先级队列中的比较器是否与c++中的正常比较器相反?



我尝试为向量和优先级队列制作相同的比较器,但它们给出了相反的结果。为什么会这样呢?

代码:

struct cmp {
bool operator()(int a, int b)
{
return a<b;
}
};
bool compare(int a, int b)
{
return a<b;
}
int main()
{
priority_queue<int,vector<int>, cmp> numbers;
vector<int>v;
v.push_back(1);
v.push_back(20);
v.push_back(7);
sort(v.begin(), v.end(), compare);
numbers.push(1);
numbers.push(20);
numbers.push(7);
cout << "Priority Queue: ";
while(!numbers.empty()) {
cout << numbers.top() << ", ";   
numbers.pop();
}
cout << endl;
cout<<"Vector: "; 
int i=0;
while(i<v.size()) {
cout << v[i] << ", ";   
i++;
}
cout << endl;
return 0;
}
//Output:
Priority Queue: 20, 7, 1, 
Vector: 1, 7, 20, 

//输出:优先队列:20,7,1,向量:1,7,20,

请澄清歧义。由于

是的,它们反向工作。有关一个可能的参考,请参阅cppreference对std::priority_queue的描述:

模板参数

[…]

Compare- A提供严格弱排序的比较类型。

注意,Compare形参是这样定义的:如果它的第一个参数以弱顺序出现在第二个参数之前,则返回true。但是因为优先级队列首先输出最大的元素,所以"排在"前面的元素实际上是最后输出的。也就是说,队列的前面包含"最后一个"。