2020年OJ习题【map】
map翻译为映射,是STL中的常用容器。其实,数组就是一种映射,比如:int a[100];就是定义了一个int到int的映射。而a[5]=25;就是把5映射到25。数组总是将int类型映射到其它基本类型(称为数组的基类型),这同时也带来了一个问题,有时候我们希望把string映射成一个int,数组就不方便了。这时就可以使用map,map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)。
要使用map,必须先添加map头文件,即#include ,同时必须要有“using namespace std”。
定义一个map的方法为:map<typename1,typename2> name;
其中,typename1是映射前的类型(键key),typename2是映射后的类型(值value),name为映射的名字。
普通int数组a就是map<int,int> a。而**如果是字符串到整型的映射,就必须使用string,而不能使用char,即map<string,int> a。**map的键和值也可以是STL容器,比如:map<set,string> mp。当然,map的键和值都是唯一的。
访问 map 的元素有两种方式,一种是通过下标访问;另一种是通过迭代器访问。
通过下标访问就像普通的数组元素访问,例如先定义map<char,int> mp,然后就可以通过mp[‘c’]的方式来访问它对应的元素,如mp[‘c’]=124。
通过迭代器访问,先作如下定义:
map<typename1,typename2>::iterator it;
因为map的每一对映射都有两个typename,所以,我们使用“it->first”来访问键,而使用“it->second”来访问值。
map常用函数:
(1)find()和 size()
find(key)是返回键为 key 的映射的迭代器,时间复杂度为 0(log 2 n),n 为 map 中映射的对数。size()用来获得map中映射的对数,时间复杂度为O(1)。
(2)clear()
clear()用来清空 map,时间复杂度为 0(n)。
(3)erase()
erase()可以删除单个元素,也可以删除一个区间内的所有元素。
删除单个元素可以用:erase(it),it为要删除的元素的迭代器,时间复杂度为O(1)。
也可以用:erase(key),key为要删除的映射的键,时间复杂度为O(log2n)。
删除一个区间内的所有元素用:erase(first,last),first为区间的起始迭代器,last为区间的末尾迭代器的下一个地址,也就是左闭右开的区间[first,last),时间复杂度为O(last-first)。
保龄球-map
map的key存得是保龄球数,value存得是位置
注意这里输出不能用cout,会超时
#include <bits/stdc++.h>
using namespace std;
map<int,int>vis;
int n,q,m,p;
int main()
{ios::sync_with_stdio(false);cin>>n;for(int i=1;i<=n;i++){cin>>p;vis[p]=i;}cin>>q;while(q--){cin>>m;if(vis[m])printf("%d\n",vis[m]);elseprintf("0\n");}return 0;
}
查字典
#include <bits/stdc++.h>
using namespace std;
map<string,int>vis;
string name;
int p,m,n;
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>name;cin>>vis[name];}cin>>m;for(int i=1;i<=m;i++){cin>>name;cout<<vis[name]<<endl;}return 0;
眼红的Medusa
这题有意思,一开始一直不知道错哪里了,结果再一看题目,要求按前者的顺序输出hhh。。。。。。
#include <bits/stdc++.h>
using namespace std;
map<int,int>vis;
int x,m,n,a[100005],b[100005];//a存第一个奖项的得主编号,b存两个奖项的得主编号,x输入第二个奖项的得主编号
int main()
{cin>>n>>m;int cnt=0;for(int i=1;i<=n;i++){cin>>a[i];//第一个奖项得主先不用放map里}for(int i=1;i<=m;i++){cin>>x;vis[x]++;//先放第二个奖项的得主}for(int i=1;i<=n;i++){if(vis[a[i]])//在这里判断是否是两个奖项得主b[++cnt]=a[i];}for(int i=1;i<=cnt;i++){i==cnt?cout<<b[i]:cout<<b[i]<<" ";}return 0;
}
指数序列
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
map<ll,int>vis;
int n,x;
int main()
{cin>>n;int cnt=0,maxn=0;while(n--){cin>>x;vis[x]++;if(vis[x]==2){ll i=x;while(vis[i]==2)//进位{vis[i]-=2;vis[i+1]++;i++;}}}map<ll,int>::iterator it;for(it=vis.begin();it!=vis.end();it++){if(it->second!=0){cnt++;//记录1的个数if(it->first>maxn)//记录最高位maxn=it->first;}}cout<<maxn+1-cnt<<endl;return 0;
}
2020年OJ习题【map】相关推荐
- 2020年2月17日 林大OJ习题 map
2020年2月17日 map map相当于一种特殊的数组.普通的数组是从数到数或字符的映射,即int或char类型的数组,下标都是数字.而map则是任意数据类型间的映射.借助map能完成更多类型的插入 ...
- 西电2020 python OJ作业(50道题目,持续更新)
西电2020 python OJ作业(50道题,持续更新) 0.A+B problem 题目描述 用来适应环境的题目,自然比较简单些. 计算2个整数的和.这两个整数都在1到1000之间. 输入 输入只 ...
- 2020年2月18日 林大OJ习题 set
2020年2月18日 set set相当于一个自动排序+自动去重的数组,即插入时会自动排序,插入重复元素时不会变化.set的元素访问需要用到迭代器,其原理可以类比普通循环中的循环变量i. 林大OJ 7 ...
- 2020年2月12日 林大OJ习题 队列
2020年2月12日 队列 林大OJ 1632 周末舞会-队列 队列的基本题目,重在理解队列的原理. #include <bits/stdc++.h>using namespace std ...
- 2020年1月2日 林大OJ习题 暴力枚举
2020年1月2日 暴力枚举 林大OJ 8 二倍的问题 #include <bits/stdc++.h>using namespace std;int main() {int n,i,j, ...
- 林大OJ习题 2020年1月11日
3个数的运算 #include <stdio.h> #include <stdlib.h>int main() {long a,b,c,d;while(scanf(" ...
- 林大OJ习题 2020年1月7日
合并字符串 (也可以直接使用函数 strcat()) #include <stdio.h> #include <stdlib.h> #include <string.h& ...
- 林大OJ习题 2020年1月5日
二分查找 #include <iostream> #include <bits/stdc++.h> using namespace std; int a[1000000]; i ...
- 林大OJ习题 2020年1月14日
n个数求和 #include <stdio.h> #include <stdlib.h>int main() {long long sum,n,i;while(scanf(&q ...
最新文章
- 递归实现【指数型 / 组合型 / 排列型】枚举
- Hyperledger Fabric Chaincode 开发
- SAP loyalty management点击了公式超链接后的处理逻辑
- 性能测试十四:Xshell链接linux虚拟机
- 【网络流24题----01】飞行员配对方案问题
- SiteMesh JSP布局框架介绍
- Julia : 终于1.0了,这一天来得有点久
- openmp 并行 速度更慢_OpenMP和C并行for循环:为什么我的代码在使用OpenMP时会变慢?...
- 数模电路基础知识 —— 8. PN结与三极管的工作原理
- οnchange相当于前端js函数,可以实现前端实时更新以及修改验证
- iframe嵌入微信公众号页面(有图片)
- [正则表达式] 校验经度和纬度
- 面试题:赛马最快N匹
- Bootstrap(一)
- [渝粤教育] 兴义民族师范学院 数据结构 参考 资料
- 微信公众号开发相关问题
- 走进游戏中的美术:游戏美术风格介绍
- 【MATLAB图像处理实用案例详解(1)】—— 基于直方图优化的图像去雾技术
- 5G NR带宽 频点
- react安装postcss-pxtorem
热门文章
- 产业区块链一周新动态
- 【Python工具】Python实现一款支持各大平台的视频下载器 | 附源码
- Ubuntu 18.04 16.04 设置输入法切换方法 中文输入法
- 第一次实验报告:使用Packet Tracer分析HTTP数据包
- Python绘图-怎么获取某个值在色带中对应的颜色
- JavaScript放大镜插件magnifier实现图像放大效果
- 关于深度学习移动化的思考
- Could not find any downloads that satisfy the requirement tensorflow
- Linux必会100个命令(十六)ping、nc
- 令人细思极恐的小故事_“&”号的令人惊讶的故事