返回

一道map例题

发布时间:2023-01-03 10:00:27 364

一、题目

小明的一位同学是学霸,他的家中有很多藏书,真可谓汗牛充栋。小明想考一考学霸,给学霸出了一道难题。小明问这么多书籍,到底有多少本不一样的书,每样书的名字是什么?(因为有的书名是一样的,所以我们把它们视为同样的书)学霸就是学霸,张口就说出了答案。不知道你是否也是学霸?一起来挑战下!

输入格式

第一行是书籍总量n(1<=n<=1e6)。然后有n行书名(书名是一个英文字符串,字符串的长度小于100,中间没有空格)。

输出格式

第一行是不同书籍的数量,然后按照书名的字典序输出书名和数量

样例输入

4
English
maths
Chinese
Chinese

样例输出

3
chinese 2
english 1
math 1

二、解题思路

为何会想到用map映射解决这道题?

主要是看到输出格式中按照书名的字典顺序输出,如果不用映射输出(映射自带有排序功能,string类型的变量会按照字母顺序来输出),很难再想出输出会按照字母顺序输出。

敲代码时,需要注意

1、在输入输出过多时,不宜用cin cout进行输入输出,很容易超时,应该改用C语言正常使用的printf 和scanf进行输入和输出

2、使用map、set等stl库时,千万不要忘了头文件,和using namespace std;

3、使用map(string,int) a时,直接a[string]++,因为在int类型value没有初始化时,默认值就是0。


三、代码及注释

#include
#include
#include
using namespace std;
int main()
{
int n;
string name;//不能忘记头文件string
cin >> n;
map<string, int> a;//不能忘记头文件
for (int i=0;i<n;i++)
{
cin >> name;
a[name]++;//此时并没有对key的value进行初始化,但int类型默认是0!方便许多
}
cout << a.size()<<endl;
for (map<string, int>::iterator it = a.begin(); it != a.end(); it++)
{
cout << it->first << " " << it->second << endl;//满足题目要求,按照first的字母进行排序输出
}
return 0;
}

一道map例题_头文件

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
QSlider的用法 2023-01-03 09:47:13