priority_queue的运算符重载问题

时间:2023-02-03 17:38:46

对于需要比较的函数或STL(最常见的为sort,priority_queue)

要对自创的结构进行运算符重载(sort可以写cmp,一样的效果)

 

1、只能对小于号重载

      cmp函数与其起到相同的作用

 

2、sort:返回值为真则前后不交换

      priority_queue:与sort相反,返回值为真则前后交换

 

可以通过两者默认相反来记忆

#include <bits/stdc++.h>

using namespace std;

struct node
{
    int x,y;
};

bool operator < (node a,node b)
{
    return a.x*a.y<b.x*b.y;
}

bool cmp(node a,node b)
{
    return a.x*a.y<b.x*b.y;
}

int main()
{
    priority_queue<node> que;
    que.push(node{1,10});que.push(node{2,2});que.push(node{3,5});
    
    vector<node> v;
    v.push_back(node{1,10});v.push_back(node{2,2});v.push_back(node{3,5});
    sort(v.begin(),v.end());  
    //sort(v.begin(),v.end(),cmp);
    
    node a=que.top();
    cout << a.x << " " << a.y << endl;
    cout << v[0].x << " " << v[0].y;
    
    return 0;
}

 

对于上述代码,priority_queue输出   3  5

                                    sort      输出   2  2