先来讲下priority_queue
在优先队列中,优先级高的元素先出队列。
标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。
1、通过<操作符可知在整数中元素大的优先级高。
priority_queue<int> q;
故出队序列为:9 6 5 3 2
2、传入一个比较函数,使用functional.h函数对象作为比较函数。实现从小到大
priority_queue<int, vector<int>, greater<int> >q2;
其中
第二个参数为容器类型。
第三个参数为比较函数。
故出队序列为:2 3 5 6 9
3、自定义优先级。
struct node
{
friend bool operator< (node n1, node n2)
{
return n1.priority < n2.priority;
}
int priority;
int value;
};
在该结构中,value为值,priority为优先级。
通过自定义operator<操作符来比较元素中的优先级。
在示例3中输出结果为:
优先级 值
9 5
8 2
6 1
2 3
1 4
注:重载大于则不行
结构体优先队列
struct Student{
int level;
string name;
}
priority_queue<Student> pq;
//想要对Student中的level从小到大排序,有两种方法:
//1、直接在结构体重载小于运算符
struct Student{
int level;
string name;
bool operator <(const Student& st)const {
return level > st.level;
}
}
//2、在结构体外重载结构体小于运算符
bool operator < (const Student& a,const Student& b){
return a.level > b.level;
}
合并果汁 例题https://blog.csdn.net/c20182030/article/details/52727101