例如: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;
}
标签:std,容器,compare,pq,return,函数,int,书写,priority
From: https://blog.51cto.com/u_14834110/7142037