【STL】queue用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GreatJames/article/details/75145631

相当于去食堂吃饭排队,先排的先打到饭先出来(出队),后排队的后面出队,这就是线性存储表,元素的插入只能在队尾,元素的删除只能在队首

queue<int>q;

q.push():入队,即插入元素

q.pop():出队,即删除元素

q.front():读取队首元素

q.back():读取队尾元素

q.empty():判断队列是否为空

q.size():队列当前元素有多少,即队列长度


基础队列:

int main()
{
    queue<int>q;
    for (int i = 1; i < 10; i++)
    {
        q.push(i);    //入队
    }
    cout << q.size() << endl; //查看队列有多少元素
    cout << q.front() << endl; //读取队首元素
    cout << q.back() << endl; //读取队尾元素
    while (!q.empty())
    {
        cout << q.front() << ' '; //读取队首元素,在学习bfs的时候应该都用过了吧
        q.pop(); //把队首元素出队,即删除,第二个数就变成了队首元素
    }
    return 0;
}

priority_queue -- 优先队列

优先队列是队列的最优策略版本,相当于在排队的时候,高个子的比较强势,不管先来后到,直接插到前面去打饭,依次比他矮的排在他后面,就形成了一个降序的队列。

优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给队列里的元素进行了由大互小的顺序排序。元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新定义比较规则,即重新定义从小到大排序。 

       优先队列和队列的头文件都是<queue>

       优先队列的成员函数和队列都是差不多的,但是有一个不一样的地方就是:队列读取队首元素是q.front(); 而优先队列是q.top();

int main()
{
    priority_queue<int>q;
    for (int i = 1; i < 10; i++)
    {
        q.push(i);    //入队
    }
    cout << q.size() << endl; //查看队列有多少元素
    while (!q.empty())
    {
        cout << q.top() << ' '; //读取队首元素
        q.pop(); //把队首元素出队,即删除,第二个数就变成了队首元素
    } //可以看出是降序的
    return 0;
}

按照元素从小到大排序:

    ///整形优先队列,按照从小到大排序:测试可输入任意五个整数。  
      
    #include <iostream>  
    #include <queue>  
    using namespace std;  
    int main()  
    {  
        int i,a;  
        priority_queue<int,vector<int>,greater<int> >qu;  
        for(i=0;i<5;i++)  
        {  
            cin >>a;  
            qu.push(a);  
        }  
        for(i=0;i<5;i++)  
        {  
            cout << qu.top()<<endl;  
            qu.pop();  
        }  
    }  

在结构体中我们可以通过重载<来实现

///整形优先队列,按照x从小到大排序:测试可输入任意五个坐标,按x从小到大的顺序排序,
///如果x相等则按y从大到小排序,这是重新定义“<”实现的。
struct num
{
    int x, y;
    friend bool operator < (num n1, num n2)
    {
        if (n1.x == n2.x)
        {
            return n1.y < n2.y;
        }
        else
        {
            return n1.x > n2.x;
        }

    }

};
int main()
{
    //priority_queue <num, vector<num>, greater<num> >qu;
    priority_queue <num> qu;
    int i;
    num a;
    for (i = 0; i < 6; i++)
    {
        cin >> a.x >> a.y;
        qu.push(a);
    }
    for (i = 0; i < 6; i++)
    {
        cout << qu.top().x << ' ' << qu.top().y << endl;
        qu.pop();
    }
    return 0;
}



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页