在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