跳转至

C++ 中自定义比较函数*

记录一下 C++ 中自定义比较函数的几种用法。

priority_queue 优先队列*

优先队列也就是堆,这里记录一下如何自定义优先队列的比较函数。

默认是 <,对应大顶堆,通常我们都用小顶堆,所以定义的时候应该写 priority_queue<int, vector<int>, greater<int>> pq,指定使用 > 比较。

或者我们重载 < 运算符:

// 这里 函数参数列表后加 const 的用法仅用于类的成员函数,表示函数不能修改类成员
bool operator<(const Type&a, const Type& b) const {
    ...
}

或者定义一个比较类,重载它的 () 运算符:

struct cmp {
    bool operator()(const Type&a, const Type& b) {
        ...
    }
};
priority_queue<Type, vector<Type>, cmp> pq;

sort, priority_queue, map, set 比较*

默认都是小于号,都是升序,优先队列默认是大顶堆因为出堆都是末尾元素出堆。

sort 自定义可以用一个 bool cmp(const Type& a, const Type& b) {} 函数,传入 cmp。或者像上面一样定义一个类,传入 cmp()

map 和 set 都是定义类传入 cmp()


最后更新: November 26, 2020