STL map(圖) C++
標頭檔案:#include<map> //按照鍵值預設已經排好序(升序)
map的功能:建立key和value的對應,可以通過key來唯一查詢value,查詢的時間複雜度為O(logn);
在map中key置是唯一的不可以被修改,而value可以被修改。
定義:map<key型別,value型別> 變數名;key和value的型別可自定義;
例如:map<key,value> M;
常用方法(加粗為常用方法):
兩個正向迭代器(iterator):begin()和end();
兩個反向迭代器(iterator):rbegin()和rend();
插入資料:insert();// insert(pair<與map中的定義一致>(資料)) 名稱空間std
insert(map<key,value>::value_type(資料));
map的大小:size();//返回一個整型數,代表內元素的個數;
查詢資料:count(key);//由於map的特性,返回值為0或1;用於返回指定key值出現的次數;
find(key); //返回值為迭代器(iterator)型別;
刪除資料:erase();//可以根據key值進行刪除,或者知道某個迭代器的位置進行刪除;
//也可以進行區間刪除,erase(iterator fir,iterator last);
清空:clear();//相當於erase(map.begin(),map.end());
交換:swap();//同list與vector,交換map中所有的元素;
lower_bound();//返回鍵值key可以插入的位置的第一個位置(iterator);//採用二分查詢方式
upper_bound();//返回鍵值key可以插入的最後一個位置(iterator);
資料結構實驗之查詢三:樹的種類統計
Time Limit: 400 ms Memory Limit: 65536 KiBProblem Description
隨著衛星成像技術的應用,自然資源研究機構可以識別每一個棵樹的種類。請編寫程式幫助研究人員統計每種樹的數量,計算每種樹佔總數的百分比。
Input
輸入一組測試資料。資料的第1行給出一個正整數N (n <= 100000),N表示樹的數量;隨後N行,每行給出衛星觀測到的一棵樹的種類名稱,樹的名稱是一個不超過20個字元的字串,字串由英文字母和空格組成,不區分大小寫。
Output
按字典序輸出各種樹的種類名稱和它佔的百分比,中間以空格間隔,小數點後保留兩位小數。
Sample Input
2 This is an Appletree this is an appletree
Sample Output
this is an appletree 100.00%
#include<map>
#include<stdio.h>
#include<string>
#include<iostream>
#define N 25
using namespace std;
char s[N];
int rear = 0;
int main()
{
int n;
map<string, int> M;
scanf("%d", &n);
getchar();//吸收回車
for(int i = 0; i < n; i++)
{
char c;
c = getchar();
while(c != '\n')
{
if(c >= 'A' && c <= 'Z')
{
c = c + 32;//大小寫轉化
}
s[rear++] = c;
c = getchar();
}
s[rear] = '\0';
rear = 0;
if(M.find(s) == M.end())
{
M.insert(pair<string, int>(s, 1));
}
else
{
M[s]++;
}
}
for(map<string, int>::iterator it = M.begin(); it != M.end(); it++)
{
cout << it->first;
int num= it->second;
double output = (double)num / n;
printf(" %.2lf%%\n", 100 * output);
}
M.clear();
return 0;
}