在ACM中优先队列的使用频率非常高,现在给出三种定义比较函数的做法:
一般情况都是给我们自己定义的结构体定义比较函数,比如我们定义的结构体如下:
struct node
{
int price; //物品的价值
int id; //物品id
};
现在定义一个优先队列 priority_queue<node>que; 如果直接这样定义,程序会报错,因为node类型不能比较大小,优先队列就不能排序。
如果我们希望队列元素按物品价值从小到大排序,如果相同再按id从小大排序。
第一种方法如下:
struct node
{
int price; //物品的价值
int id; //物品id
bool operator < (const &a)const
{
if(price == a.price)
return id > a.id;
return price > a.price;
}
};
priority_queue<node>que;
第二种方法如下:
struct node
{
int price; //物品的价值
int id; //物品id
friend bool operator < (node a, node b)
{
if(a.price == b.price)
return a.id > b.id;
return a.price > b.price;
}
};
priority_queue<node>que
前面两中方法写法上都差不多,第三种就有点不同了
第二种方法如下:
struct node
{
int price; //物品的价值
int id; //物品id
};
struct cmp_node
{
bool operator()(node a,node b)
{
if(a.price == b.price)
return a.id > b.id;
return a.price > b.price;
}
}
priority_queue<node,vector<node>,cmp_node>que