stl-map
圖,自動建立表示關鍵字和鍵值(key - value)之間的對應關系,兩者可以是任何數據類型,key唯一並且自動排序,value不唯一。
1.頭文件#include<map>
2.map<string,int>mp; //例如這個聲明,表示字符串和數字的關系,string和int可以換成別的數據類型
3.clear() 清空操作
4.begin() 返回容器的第一個對應關系的地址
5.end() 返回容器的最後一個對應關系的地址
6.max_size() 返回容器的能存儲的對應關系個數,不同數據類型不同,一般用不上
7.size() 返回容器的關系個數
8.map賦值
關系自動建立,形式類似數組,比如:
map<int,int>mp1;
map<string,int>mp2;
map<double,int>mp3;
mp1[5]=10;
mp2["sb"]=2;
mp3[3.66]=1000;
如果此時mp1[5]=15,那麽key=5的value10會被15覆蓋
也可以用插入函數insert(),插入相同key不同value時不會被覆蓋,不常用
9.遍歷,用叠代器遍歷,it訪問的key用it->first,訪問value用it->second
10.erase(key) 刪除關鍵字key所指的鍵值
11.count(a) 查找key=a是否存在,存在則返回1,否則返回0
題目應用:(NYOJ95)
描述
所謂眾數,就是對於給定的含有N個元素的多重集合,每個元素在S中出現次數最多的成為該元素的重數,
多重集合S重的重數最大的元素成為眾數。例如:S={1,2,2,2,3,5},則多重集S的眾數是2,其重數為3。
現在你的任務是:對於給定的由m個自然數組成的多重集S,計算出S的眾數及其重數。
- 輸入
- 第一行為n,表示測試數據組數。(n<30)
每組測試的第一行是一個整數m,表示多重集S中元素的個數為m
接下來的一行中給出m(m<100)個不大於10萬的自然數
(不會出現不同元素出現的次數相同的情況,如:S={11,11,22,22,33,33})。 - 輸出
- 每組測試數據輸出一行,包含兩個數,第一個是眾數,第二個是其重數,中間以空格隔開。
- 樣例輸入
-
1 6 1 2 2 2 3 5
- 樣例輸出
- 2 3
- AC代碼:
#include<stdio.h> #include<iostream> #include<algorithm> #include<map> using namespace std; int main() { int t; scanf("%d",&t); while(t--) { int m,x; scanf("%d",&m); map<int,int>mp; mp.clear(); while(m--) { scanf("%d",&x); mp[x]++; } int ans1,ans2=0; for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++) { if(it->second>ans2) { ans1=it->first; ans2=it->second; } } printf("%d %d\n",ans1,ans2); } return 0; }
stl-map