头文件:#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);
数据结构实验之查找三:树的种类统计
Problem 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; }