优先权队列
// 优先权队列默认是最小堆,即堆顶元素最小
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 条评论

发表评论

邮箱地址不会被公开。