1. 程式人生 > >stl-map

stl-map

刪除 自然 c代碼 int mil 容器 例如 鍵值 print

圖,自動建立表示關鍵字和鍵值(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