C++使用priority_queue方法

来源:互联网 发布:网络用语八组鹅 编辑:程序博客网 时间:2024/04/28 10:32

优先队列是一种容器适配器,根据一种严格的排序标准,它的第一个元素一般是在它所包含的元素中最大的。
这种情况类似于一个堆,元素可以随时插入,只能堆中最大的元素才能被检索到(那个在优先队列顶部的元素)。
优先队列是作为容器适配器,实现使用一个特定的容器类的封装对象作为它的底层容器,提供一组特定的成员函数来访问它的元素。元素出现的“返回”特定的容器,这被称为优先队列的顶部。
Container 必须是用数组实现的容器,比如 vector, deque 但不能用 list.
STL里面容器默认用的是 vector. 比较方式默认用 operator< , 所以如果你把后面俩个参数 缺省的话,优先队列就是大顶堆,队头元素最大。

void test(){    struct BBC    {        int a, b, c;        BBC(int x, int y, int z) :a(x), b(y), c(z){}        bool operator<(const BBC &nyt)const{            return b < nyt.b;        }    };    int p[7] = { 2, 7, 13, 19,1,14,9};    int n = 7,N=6;    priority_queue<BBC> q;    for (int j = 0; j < n; ++j){        q.push(BBC(0, p[j], p[j]));    }    for (int i = 0; i < N; ++i){        cout << q.top().b << " ";        q.pop();    }    cout << endl;}
0 0
原创粉丝点击