map、queue、priority_queue、stack、pair的常见用法

一、map(映射)

常用函数:

#include <iostream>
#include <map>
using namespace std;
int main(){
map<char,int>a;                //定义
a['c']=11;
a['c']=22;                     //map中的键是唯一的('c'为键,22为值)
a['z']=55;
a['b']=76;
a['n']=41;
a['k']=0;
cout<<a['c']<<"  ";             //通过下标访问
cout<<a.size()<<endl;          //映射的对数
map<char,int>::iterator it=a.begin();   //迭代器
for(it;it!=a.end();it++)          //通过的迭代器访问
    cout<<it->first<<" "<<it->second<<endl;  //map会以键从小到大的顺序自动排序
cout<<endl;
a.erase('k');         //删除单个元素
a.erase(a.find('n'),it); //删除区间内元素(注:在上面经过循环后迭代器it的地址为a.end() )
for(map<char,int>::iterator lz=a.begin();lz!=a.end();lz++)
    cout<<lz->first<<" "<<lz->second<<endl;
cout<<a.size()<<endl;
a.clear();        //清空所有元素
cout<<a.size();
}

 输出

注:1.如果是字符串到整型的映射,必须使用string而不能用char数组。

        2.map的键和值可以是STL容器,如:  map<set<int>,int>mp;

二、queue(队列)

常用函数:

#include <iostream>
#include <queue>
using namespace std;
int main(){
queue<int>a;      //定义
for(int i=1;i<=5;i++)
    a.push(i);        //元素入队
cout<<a.front()<<" "<<a.back()<<endl;   //访问队首和队尾的元素
a.pop();    //令队首出队(删除)
if(a.empty()==true)     //检测queue是否为空
    cout<<"Empty"<<endl;
else{
  cout<<a.front()<<endl;}
cout<<a.size();  //queue内元素的个数
}

输出

 

 注意:在使用front()和back()前,必须用empty()判断队列是否为空,否则可能会出现错误。

三、priority_queue(优先队列)

1、常用函数与queue的push()、empty()、size()相同,两者函数pop()有点不同。

优先队列没有front()和back(),但有函数top()

#include <iostream>
#include <queue>
using namespace std;
int main(){
priority_queue<int>a;
for(int i=1;i<=5;i++)
    a.push(i);
if(a.empty()==true){
    cout<<"Empty"<<endl;
}
else{
    cout<<a.top()<<endl;
}
a.pop();
if(a.empty()==true){
    cout<<"Empty"<<endl;
}
else{
    cout<<a.top();
}
}

输出

5

4

注意:在优先队列中,队首元素一定是当前队列中优先级最高的那一个。

2、priority_queue内优先级

(1)默认数字(字典序)越大优先级越高。

priority_queue<int>a;
priority_queue<int,vector<int>,less<int> >a;

 以上两种定义是一样的。

可以通过以下定义使数字越小优先级越大

priority_queue<int,vector<int>,greater<int> >a;

(2)对于结构体来说,可通过与sort差不多的方式来实现

#include <iostream>
#include <queue>
using namespace std;
struct zz{
string n;int p;
}r1,r2,r3;
struct cmp{
bool operator ()(zz a,zz b){
return a.p>b.p;
}
};
int main(){
priority_queue<zz,vector<zz>,cmp> a;
r1.n="No.1";r1.p=6;
r2.n="No.2";r2.p=4;
r3.n="No.3";r3.p=1;
a.push(r1);
a.push(r2);
a.push(r3);
if(a.empty()==true)cout<<"Empty"<<endl;
else
cout<<a.top().n<<" "<<a.top().p;
}

输出

No.3  1

四、stack(栈)

常用函数:

#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> a;
for(int i=1;i<=5;i++)
    a.push(i);              //入栈
if(a.empty()==true)       //检测stact是否为空
    cout<<"Empty"<<endl;
else cout<<a.top()<<endl;       //访问栈顶元素
a.pop();                    //将栈顶元素出栈
cout<<a.size();            //stack中元素的个数
}

输出

5

4

五、pair

可以看作一个内部有两个元素的结构体。

常见用法:

#include <iostream>
#include <map>
using namespace std;
int main(){
pair<char,int>a('s',7);
pair<int,int>b(1,8);
pair<int,int>c(1,6);
if(b>c)cout<<"b>c"<<endl;      //两个pair类型数据可以直接进行比较
else cout<<"b<c"<<endl;
map<char,int>d;
d.insert(a);
d.insert(make_pair('a',2));
d.insert(pair<char,int>('j',0));     //pair可作为map的键值对来进行插入
for(map<char,int>::iterator it=d.begin();it!=d.end();it++)
    cout<<it->first<<" "<<it->second<<endl;
}

输出

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值