自定义比较函数

在我们通常使用sort,priority_queue时,默认的比较函数为less,即从小到大的排序。但是偶尔在实际情况中,我们也需要自定义一个比较函数,尤其是在遇到pair或者自定义类时。

首先需要区分的是priority_queue的第三个参数为比价函数,它要求为一个类;
sort的第三个参数也是比较函数,它要求为一个函数。
通常我们使用的方式,构造一个类,如下

typedef pair PAIR;
struct cmp_val{
    bool operator()(const PAIR& a, const PAIR& b){
        return a.first < b.first;
    }
};

在sort使用时如下:

sort(vec.begin(), vec.end(), cmp_val());

在priority_queue中使用时如下:

priority_queue, cmp_val) test;

priority_queue相当于一个堆(默认为最大堆),test.top()取最大元素。

以下提供测试代码

code

#include
#include
using namespace std;

typedef pair PAIR;


struct cmp_val{
    bool operator()(const PAIR& a, const PAIR& b){
        return a.first < b.first;
    }
};

struct cmp{
    bool operator()(const int& a, const int& b){
        return a>b;
    }
};

int main(){
    int a[] = {1, 1, 1, 2, 5, 5, 4, 4, 3, 7, 7, 3};
    int a_size = sizeof(a) / sizeof(int);
    vector fre(a, a+a_size);
    sort(fre.begin(), fre.end(), cmp());
    for(int i=0; i m;
    priority_queue, cmp_val> test;
    for(auto x: fre) m[x]++;
    for(auto x: m){
        cout< 3) test.pop();
    }
    cout<

你可能感兴趣的:(自定义比较函数)