一般来说,通过<运算符来做比较(包括自定义的<运算符),结果应该是升序。但在优先级队列里面,用<运算符来做比较,结果是降序,用>运算符来做比较,反而是升序,和平常的情况是反的
struct ListNode{
int val;
ListNode* next;
ListNode(int a,ListNode* b=nullptr):val(a),next(b){}
};
int main()
{
ListNode* A=new ListNode(1);
ListNode* B=new ListNode(2);
ListNode* C=new ListNode(3);
auto cmp = [](ListNode* a, ListNode* b){
return a->val < b->val;
};
priority_queue<ListNode*, vector<ListNode*>, decltype(cmp)> pq(cmp);
pq.push(A);
pq.push(B);
pq.push(C);
while(!pq.empty()){
cout<<pq.top()->val<<endl;
pq.pop();
}
return 0;
}
输出为:3 2 1
具体是为什么呢,底层实现不同吗QAQ