STL queue priority_queue

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

queue 队列

queue 队列 就像排队一样,后来的排在后面,先来的先出队。所以只能对队首和队尾的元素进行操作

back() 返回最后一个元素
empty() 如果队列空则返回真
front() 返回第一个元素
pop() 删除第一个元素
push() 在末尾加入一个元素
size() 返回队列中元素的个数
#include<queue>
#include<iostream>
using namespace std;
int main()
{
    queue<int>q;
    q.push(1);                //在队列末尾依次插入1 2 3 
    q.push(2);
    q.push(3);
    
    int u=q.back();            //返回队列中最后一个元素 
    cout<<"队列最后一个元素为:"<<u<<endl;
    
    int v=q.front();        //返回队列中第一个元素 
    cout<<"队列第一个元素为:"<<v<<endl;
    
    q.pop();                //删除第一个元素 
    v=q.front();
    cout<<"队列第一个元素为:"<<v<<endl; 

    int size=q.size();                //size返回元素个数 
    cout<<"队列中存在"<<size<<"个元素"<<endl; 
    
    cout<<"判断队列是否为空,空输出1 否则输出1:"<<endl;
    int flag=q.empty();            //判断队列是否为空,为空返回1,否则返回0 
    cout<<flag<<endl;
    return 0;
 }

priority_queue 优先队列

优先队列,是有优先级高低之分,队首的元素是优先级最高的。

在优先队列中,没有 front() 函数与 back() 函数,而只能通过 top() 函数来访问队首元素(也可称为堆顶元素),也就是优先级最高的元素。

empty() 如果优先队列为空,则返回真
pop() 删除第一个元素
push() 加入一个元素
size() 返回优先队列中拥有的元素的个数
top() 返回优先队列中有最高优先级的元素

priority_queue<Type, Container, Functional>

Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。

如果不写后两个参数,那么容器默认用的是vector,比较方式默认用operator<,也就是优先队列是大顶堆,队头元素最大。
 

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int main ()
{
	priority_queue<int> q;//默认从大到小 
	//priority_queue<int,vector<int>,greater<int> > q;//从小到大排序
	//priority_queue<int,vector<int>,less<int> > q;//从大到小 
	q.push(90);
	q.push(56);
	q.push(100);
	while(q.empty()!=1)
	{
		cout << q.top() << " ";
		q.pop();
	}
	return 0;
} 
#include <iostream>
#include <queue>
#include <vector>

using namespace std;

struct stu
{
    string name;
    int age;
 
    bool operator<(const stu &p)const
    {
        return age>p.age;
    }
}S[5];
 
int main()
{
    for(int i=0;i<5;i++)
	{
		cin >> S[i].age >> S[i].name;  
	} 
 
    priority_queue<stu>q;
 
    for(int i=0;i<5;i++)q.push(S[i]);
 
    while(!q.empty())
    {
        cout<<q.top().name<<" ";
        q.pop();
    }
 
    return 0;
}
struct stu
{
    string name;
    int age;
}S[5];

struct cmp
{
	operator ()(const stu &a,const stu &b)
	{
		return a.age > b.age;
	}
};

priority_queue<stu,vector<stu>,cmp> q;
struct stu
{
    string name;
    int age;
}S[5];

struct cmp
{
	bool operator () (const stu &a,const stu &b) const
	{
		return a.age > b.age;
	}
};

priority_queue<stu,vector<stu>,cmp> q;
struct stu
{
    string name;
    int age;
    friend bool operator <(stu a,stu b)
	{
		return a.age > b.age;
	}
}S[5];

(按照年龄的升序排列)

扫描二维码关注公众号,回复: 5705706 查看本文章

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/88361100