STL中queue和map的学习
STL学习
今天做了一题名为赶猪的题,主要是用于熟悉STL中的queue 和 map用法
题目链接赶猪题
ac代码:
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
using namespace std;
queue<string> q[1001];
map<string,bool> pig;
int main(){
string name;
int t,n,op,id;
cin>>t>>n;
rep(i,1,t){
cin>>op>>id;
if(op==0){
cin>>name;
q[id].push(name);
}
else{
if(q[id].empty())
cout<<"Error!"<<endl;
else{
string temp_name=q[id].front();
q[id].pop();
if(pig[temp_name]==0){
cout<<"Have fun!"<<" "<<temp_name<<endl;
pig[temp_name]=1;
}
else
cout<<"Gun!"<<" "<<temp_name<<endl;
}
}
}
}
首先是queue
使用方法
queue <int> a[1001] //定义了命名为a的队列1001个
front()返回第一个元素
back()返回最后一个元素
empty()如果队列空则返回真
pop()删除第一个元素
push()在末尾加入一个元素
size()返回队列中元素的个数
运用上比较简单,做几题就可。 (曾经四年的竞赛竟然都没有系统学习过)
接下 来是map
字面上map的意思是建立映射
我们常见的 int a[1000] 建立的是int 到int 的映射
例如a[1]=4 是建立1到4的映射 同理可以引申到double
double a[1000]便是建立int 到double的映射
重要的是,也是常用的就是在c++里建立string字符串到
使用时
map<string,int > sm 便建立了string 到 int的映射
使用时 sm[A]=1这样便可使字符串用作数组名(我是这么理解的)
这里引用一个他人博客内容https://blog.csdn.net/qq_42232118/article/details/82024301
1、map的定义
map<typename1,typename2>mp;
与其他STL容器在定义上不一样,因为map需要确定映射前类型(键key)和映射后类型(值value)
所以需要在<>内填写两个类型
其中一个是键的类型
第二个是值的类型
如果是int型映射到int型,就相当于是普通的int型数组
char数组作为数组不能作为键值
2、map容器内元素的访问
①通过下标访问
【注意】map的键是唯一的
mp['c']=20;
②通过迭代器访问
定义方式与其他STL容器迭代器相同
【不同】
map迭代器的使用方式和其他STL容器的迭代器不同
因为map的每一对映射都有两个typename
这决定了必须通过一个it来同时访问键和值
事实上,map可以使用it->first来访问键
使用it->second来访问值
))
3、map常用函数
①find()
find(key)返回键是key的映射的迭代器
②erase()
(1)删除单个元素
a、mp.erase(it),it为需要删除的元素的迭代器
b、mp.erase(key),key为欲删除的映射的键
例:mp.erase('c');
(2)删除一个区间内的所有元素
还是左闭右开
(3)size()
用来获得map中映射的次数
(4)clear()
清空
4、常见用途
①需要建立字符(或字符串)与整数之间影射的题目,使用map可以减少代码量
②判断大整数或者其他类型数据是否存在的题目,可以把map当bool数组使用
③字符串和字符串的映射也有可能会遇到

))
浙公网安备 33010602011771号