C++标准模板库 队列容器的使用

队列:在数据结构中也成为操作受限的线性表,是一种只允许在表的一端插入,在另一端删除的线性表

特点:先进先出,像打饭《排在最前面的先买,后到的排在队尾,即删除在队头,插入在队尾》

队列的基本操作

QueueIn(Q,x);//入队
QueueOut(Q);//出队

push(x)//x入队,即将x插入到队尾

front(),back()//获得队首元素和队尾元素

C++标准模板库 队列容器的使用_第1张图片

 pop()//令队首元素出队

C++标准模板库 队列容器的使用_第2张图片

 empty()//检测队列queue是否为空,返回true为空,返回false为非空

C++标准模板库 队列容器的使用_第3张图片

 size()//元素个数

C++标准模板库 队列容器的使用_第4张图片

注意:使用front()函数和back()函数前,必须用empty()判断队列是否为空,否则会因为队空而出现错误 


以上都是队列最基本的知识,下面和我一起来做一下经典的题吧

C++标准模板库 队列容器的使用_第5张图片

#include 
#include 
using namespace std;

int main()
{
    int m,n,k,t1,t2,i;
    cin>>m>>n>>k;
    queueman;
    for(i=1;i<=m;i++)
    man.push(i);
    queuewoman;
    for(i=1;i<=n;i++)
    woman.push(i);
    for(i=1;i<=k;i++)
    {
        t1=man.front();
        man.pop();
        cout<

 经典队列题,必会


C++标准模板库 队列容器的使用_第6张图片

#include 
#include 
using namespace std;

int main()
{
    int n,m,i,k,num=0;
    cin>>n>>m;
    queueq;
    for(i=1;i<=n;i++)
    q.push(i);
    while(q.size()>1)
    {
        k=q.front();
        num++;
        if(num==m)
        {
            q.pop();
            num=0;
        }
        else
        {
            q.pop();
            q.push(k);
        }
    }
    cout<

map容器内元素的访问

1.下标访问

#include 
#include 
using namespace std;

int main()
{
    mapmp;
    mp['c']=20;
    mp['c']=30;
    printf("%d\n",mp['c']);
    return 0;
}

2.通过迭代器访问

#include 
#include 
using namespace std;

int main()
{
    mapmp;
    map::iterator it;
    mp['d']=20;
    mp['c']=30;
    mp['a']=20;
    for(it=mp.begin();it!=mp.end();it++)
    printf("%c %d\n",it->first,it->second);
    return 0;
}

C++标准模板库 队列容器的使用_第7张图片

 C++标准模板库 队列容器的使用_第8张图片

#include 
#include 
using namespace std;

int main()
{
    string ch,ans1,t;
    int i,n,ans;
    mapvis;
    map::iterator it;
    while(cin>>n&&n!=0){
        ans=-999;
        vis.clear();
    for(i=1;i<=n;i++)
    {
        ans=-9999;
        cin>>ch;
        vis[ch]++;
    }
    for(it=vis.begin();it!=vis.end();it++)
    {
        t=(*it).first;
        if(ans

 pair的用法,可以通过pair给map赋值

#include 
#include 
using namespace std;

int main()
{
    mapmp;
    map::iterator it;
    pairp;
    string sa;
    int x,i;
    for(i=1;i<=5;i++)
    {
        cin>>sa;
        cin>>x;
        p=make_pair(sa,x);
        mp.insert(p);

    }
    for(it=mp.begin();it!=mp.end();it++)
    cout<first<<" "<second<<"\n";
    return 0;
}

优先队列

push()

top()

的用法

C++标准模板库 队列容器的使用_第9张图片

 pop()的用法

C++标准模板库 队列容器的使用_第10张图片

 empty()

C++标准模板库 队列容器的使用_第11张图片

 size()

C++标准模板库 队列容器的使用_第12张图片

 C++标准模板库 队列容器的使用_第13张图片

 

#include 
#include 
using namespace std;
struct sa
{
    int time;
    int id;
    friend bool operator<(sa a,sa b)
    {
        if(a.time!=b.time)
        return a.time>b.time;
        else
        return a.id>b.id;
    }
};
int main()
{
    int n,i, x;
    double ans=0;
    cin>>n;
    priority_queuepq;
    for(i=1;i<=n;i++)
    {
        cin>>x;
        pq.push({x,i});
    }
    struct sa tmp;
    for(i=1;i<=n;i++)
    {
        tmp=pq.top();
        if(i!=n)
        cout<

你可能感兴趣的:(c++,开发语言)