priority_queue 的简单使用方法

时间:2022-05-05 17:36:46

优先队列(priority queue)
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。
在优先队列中,元素被赋予优先级(优先级可自己定义)。
当访问元素时,具有最高优先级的元素最先删除。
优先队列具有最高进先出 (largest-in,first-out)的行为特征。

在使用的时候 一定要有  <queue>的头文件。。。据学长介绍,STL里的东西 会用就行, 不要太深入理解。

今天刚学STL,小总结一下 优先队列的东西。。



#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;

///q.push (x);///将x接到队列的末端。
///q.top ();///访问队首元素
///q.pop ();///删除队首元素
///q.front();///访问队首元素   最早被压入队列的元素。
///q.back();///访问队尾元素    最后被压入队列的元素。
///q.size();///访问队列中的元素个数
///q.empty ();///判断是否为空   当队列空时,返回true。

struct cmp
{
    bool operator () (int &a,int &b)
    {
        return a > b;///从小到大  如果想要从大到小 改成 '<'
    }
};

struct node
{
    int x;
    bool operator < (const node &a) const
    {
        return a.x < x;///从小到大  如果想要从大到小 改成 '>'
    }
}p;

int main()
{
    int n,x;
    ///priority_queue <int>q;///默认从大到小排序输出
    ///priority_queue <int ,vector<int> , greater <int>  >q;///从小到大排序输出  >>会被认为是错误  中间要加空格
    ///priority_queue <int,vector<int> ,less <int >  >q;///从大到小
    ///priority_queue <int ,vector <int>, cmp>q;
    priority_queue <node>q;
    while (~scanf ("%d",&n))
    {
        while (!q.empty ())///使用的时候要先判断队列是否为空 不为空的话就清空。。
            q.pop ();
        for (int i = 0; i < n; i++)
        {
///           scanf ("%d",&x);
///           q.push (x);
            scanf ("%d",&p.x);
            q.push (p);
        }
        while (!q.empty ())
        {
            //int s = q.top ();
            struct node  s = q.top ();
            printf ("%d  ",s.x);
            q.pop ();
        }
        printf ("\n");

    }
    return 0;
}



参考博客:http://blog.chinaunix.net/uid-21712186-id-1818266.html

http://blog.csdn.net/u013476556/article/details/38372311