• UVa 10420


      题目大意:有n个人,给出每个人的国籍,统计每个国家的人数。

      用map<string, int>做的。

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <map>
     4 #include <string>
     5 #include <algorithm>
     6 using namespace std;
     7 #define MAXN 2000+10
     8 
     9 map<string, int> m;
    10 string str[MAXN];
    11 
    12 int main()
    13 {
    14 #ifdef LOCAL
    15     freopen("in", "r", stdin);
    16 #endif
    17     int n;
    18     scanf("%d", &n);
    19     getchar();
    20     char s1[80], s2[80];
    21     m.clear();
    22     map<string, int>::iterator it;
    23     while (n--)
    24     {
    25         gets(s1);
    26         sscanf(s1, "%s", s2);
    27         string t = s2;
    28         it = m.find(t);
    29         if (it != m.end())  m[t]++;
    30         else  m[t] = 1;
    31     }
    32     int p = 0;
    33     for (it = m.begin(); it != m.end(); it++)
    34         str[p++] = it->first;
    35     sort(str, str+p);
    36     for (int i = 0; i < p; i++)
    37         cout << str[i] << " " << m[str[i]] << endl;
    38     return 0;
    39 }
    View Code

      


      当时就是大概看了看别人写的map用法的代码就开始写了,今天又看了看书,发现其实当时写的挺麻烦的:增加数据只用m[key]++;就足够了,而按字典序输出...根本就不用的,在map内部默认就是按key的升序进行排列的,直接输出就好了,想当初为这个纠结的啊...

      不过我觉得这种学习方式还是不错的,够直观,有问题就去找资料,学习然后改正,能从中发现乐趣并可以获得一点成就感,相对于系统地看一遍书,书中直接告诉你如何如何,我现在更喜欢这种方式,毕竟我一直有着“只学现在的我感觉能用到的东西”这种“临时抱佛脚”的想法。                            

                                                                      @2013-09-01

  • 相关阅读:
    队列简单题
    排序篇(c++/c实现)
    天河计算机0.5
    BZOJ2301/LG2522 「HAOI2011」Problem B 莫比乌斯反演 数论分块
    BZOJ1391/LG4177 「CEOI2008」order 最大权闭合子图
    BZOJ2007/LG2046 「NOI2010」海拔 平面图最小割转对偶图最短路
    BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路
    BZOJ2339/LG3214 「HNOI2011」 卡农 组合数学
    LG1840 Color the Axis 线段树
    LG5239 回望京都 组合数+暴力
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3287871.html
Copyright © 2020-2023  润新知