例如:priority_queue为例子。

#include <queue>

std::priority_queue<Type, Container, Compare> pq;

type:优先队列中存储的元素的数据类型。

Container:存储元素的底层容器类型,默认为std::vector<Type>

Compare:比较函数或函数对象,用于定义元素的比较原则,可以是一个函数指针、函数对象或者Lambda表达式,默认为std::less<Type>

举例说明一下

1、使用函数指针:

#include <iostream>
#include <queue>

using namespace std;

bool compare(int a, int b) {
    return a > b;
}

int main() {
    typedef bool (*CompareFunction)(int, int);
    CompareFunction comparePtr = compare;
		// CompareFunction是函数指针
    	// pq对象里面要给一个函数地址信息
    std::priority_queue<int, std::vector<int>, CompareFunction> pq(comparePtr);
    // 向 pq 中添加元素

    return 0;
}

2、使用函数对象:

#include <queue>

struct Compare {
    bool operator()(int a, int b) {
        return a > b; // 小于符号反转,以获得大顶堆效果
    }
};

// 函数对象,即Compare就行,给对象

int main() {
    std::priority_queue<int, std::vector<int>, Compare> pq;
    // 向 pq 中添加元素
    return 0;
}

3、使用Lambda表达式

#include <queue>

int main() {
    auto compare = [](int a, int b) {
        return a > b; // 小于符号反转,以获得大顶堆效果
    };
    // decltype是关键字,用于推导表达式或者函数的类型。这里就推导compare为Lambda类型,然后给pq对象传入对应的类型。
    std::priority_queue<int, std::vector<int>, decltype(compare)> pq(compare);
    // 向 pq 中添加元素
    return 0;
}