一、priority_queue的本质
priority_queue的本质就是堆,添加的元素按照堆的规则存储,默认情况下是大堆。
二、priority_queue的参数
priority_queue有三个参数。
int main() {
priority_queue<int, vector<int>, less<int>> s;
//第一个参数为要存放的数据类型
//第二个参数为优先队列采用的底层结构(默认vector)
//第三个参数判断建大堆还是小堆
//less<>表示建大堆(默认),greater<>表示建小堆
}
三、优先队列的使用
3.1、构造方式
int main() {
priority_queue<int, vector<int>, less<int>> pq1;
priority_queue<int, vector<int>> pq2(pq1);//拷贝构造
priority_queue<int> pq3=pq1;//拷贝构造
vector<int> v({1,2,3,4,5});
priority_queue<int> pq4(v.begin(),v.end());//迭代器
int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
priority_queue<int> pq5(a,a+10);//也是迭代器
}
3.2优先队列的函数
empty:判断优先队列是否为空
size:返回优先队列存储元素的个数
top:返回队头元素
push:添加元素
pop:删除头顶元素
三、内置类型的存储
内置类编译器无法进行比较,所以需要我们自己实现一个比较的仿函数。(重载“()”就是仿函数)
class Date
{
public:
Date(int d=1, int m =1):day(d),month(m)
{
};
public:
int day;
int month;
};
//自己实现Date类型的比较
template<class T>
class Myless
{
public:
bool operator() (const T& a, const T& b)
{
if (a.month != b.month)
{
if (a.month > b.month)
{
return true;
}
return false;
}
else
{
if (a.day > b.day)
{
return true;
}
return false;
}
}
};
int main() {
priority_queue<Date,vector<Date>,Myless<Date>> pq;
pq.push(Date(2, 3));
pq.push(Date(4, 2));
pq.push(Date(1, 22));
pq.push(Date(6, 21));
}
标签:queue,pq,int,C++,month,priority,Date
From: https://blog.csdn.net/2401_83733103/article/details/142097258