PAT常用STL-map
map作为存储**<键-值>**映射关系的容器,可以很方便地根据键提取值,或者根据值来查找键。
map的常用操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include<cstdio> #include<map> #include<vector> using namespace std; int main() {
map<int,int> a; map<int,vector<int> > b;
a[1]=-1;
printf("%d的对应值为%d\n",1,a[1]);
map.size()
printf("%d的对应键为%d\n",-1,*a.find(-1)); if(a.find(-2)==a.end()) printf("没找到\n");
for(map<int,int>::iterator it=a.begin();it!=a.end();it++) printf("<%d,%d>",it->first,it->second); return 0; }
|
1 2 3 4 5 6 7 8
| 输出: 1的对应值为-1 -1的对应键为1 没找到 <1,-1> -------------------------------- Process exited after 0.2512 seconds with return value 0 请按任意键继续. . .
|
根据目前做的为数不多的题目,map主要当做哈希表来用,但是区别于普通的数组构成的哈希表的是:哈希表一般用于<小整数,值>的存储,而map可以用于<大整数/string,值>的存储,因为它自动计算大整数对应的哈希值,多舒服啊!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include<cstdio> #include<map> using namespace std; int main() { map<int,int> a; int key; for(int i=0;i<5;i++) { scanf("%d",&key); if(a.find(key)==a.end()) a[key]=1; else a[key]++; } for(map<int,int>::iterator it=a.begin();it!=a.end();it++) printf("%d出现了%d次\n",it->first,it->second); return 0; }
|
1 2
| 输入: 12345678 12345678 666666 555555 666666
|
1 2 3 4 5 6 7 8
| 输出: 555555出现了1次 666666出现了2次 12345678出现了2次
-------------------------------- Process exited after 16.38 seconds with return value 0 请按任意键继续. . .
|