优先权队列
// 优先权队列默认是最小堆,即堆顶元素最小
priority_queue<int, queue<int>, greater<int>> q; //最小堆,堆顶的元素值最小
priority_queue<int, queue<int>, less<int>> q; //最大堆,堆顶的元素值最大
//结构体优先权队列比较特殊,只能按照从大到小的方式排列结构体,但是可以重载结构体的小于比较运算符 <
//反正是和重载运算符里反着来的
typedef struct zyh {
int x, y;
}zyh;
bool operator < (const& a, const& b) {
if (a.x != b.x) return a.x < b.x;
return a.y > b.y;
}
priority_queue<zyh> q;
q.push(zyh{2, 3});
q.push(zyh{2, 5});
cout << (a<b); // false 因为 <(a, b)函数返回的值是false, 也就是说a不小于b, 注意这并不意味着a>b, 因为并没有重载结构体的大于运算符
cout << q.top().y; // 3
sort函数用法
/* sort函数的具体用法是: */
sort (begin_pos, end_pos, cmp);
/* 功能是对[begin_pos, end_pos)之间的连续的同类型的元素按照cmp的方式进行排序 参数cmp可省 */
// 对普通数组进行排序 [1, 10]范围内排序
int a[100], n=10;
sort (a+1, a+n+1); //默认为升序,从小到大排
// 对vector进行排序
vector<int> a(3); //大小为3的数组
sort (a.begin(), a.end(), greater<int>()); // 按从大到小排序,和优先权队列反着来...
sort (a.begin(), a.end(), less<int>()); // 按从小到大排序
bool cmp (const zyh& a, const zyh& b) {
return a.x < b.x;
}
sort (begin, end, cmp);
0 条评论