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 KiB

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;
}

猜你喜欢

转载自blog.csdn.net/m0_37848958/article/details/80337219
今日推荐