一、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;
}
输出