• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

一个简单的例子理解C++map,运用map统计单词出现的次数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一个简单的例子理解C++ map, 运用map统计单词出现的次数


map 对象的元素是键值对(key,value),每个key对应一个value, map默认中按key定义的 “ < ” 排序。

key是一个const 对象不可以改变,其类型为map<k,v>::key_type;
value 是一个非const对象,其类型为map<k,v>::mapped_type;

访问map可以用迭代器访问也可以用下标访问:

  1、用迭代器访问:

map<k,v>::iterator iter = m.begin();......

    这时候对迭代器解引用会得到map容器中一个map<k,v>::value_type 类型的值,对于map容器来说该值是pair类型,再标准库中pair在utility 中声明,pair<first,second> first 为const 对象保存key;second为非const对象,保存value。

    在上面的例子中为pair<const string, int>。因此可以使用迭代器来访问map中的所有值。

  2、用下下标访问

    例如在编写下面程序时:

1 map<string, int> word_count; // empty
2 // insert default initialized element with key "SK"; then assign 1 to its value
3 word_count["SK"] = 1;

  该程序会在map中查找"SK"键,如果查找到则将"SK" 对应的值赋值为 1。但是word_count 初始为空,并不存在"SK"键,因此    word_count["SK"] = 1;将创建一个"SK"键,并将其对应的值初始化为1.

利用这个性质我们可以写一个之前用数组和其他方式实现起来比较麻烦的单词统计程序:


 

 1 /*==================================================================*\
 2  *
 3  *                    C++ map 运用---统计单词出现的次数
 4  *
 5  *                       2013/6/7 by 樊列龙
 6  *
 7 \*==================================================================*/
 8 
 9 #include <iostream>
10 #include <cstdlib>
11 #include <string>
12 #include <map>
13 
14 using namespace std;
15 
16 int main()
17 {
18     map<string,int> word_count;// empty
19 
20     string word;
21 
22     while(cin >> word)
23     {
24         ++word_count[word];                      // 用下标访问
25     }
26 
27     map<string, int>::iterator iter;             // iter 为pair 类型(value_type)
28     
29     for(iter = word_count.begin(); iter != word_count.end(); iter++)
30     {
31         cout << "[" << iter->first << "] = " << iter->second << endl;
32     }
33 
34     return EXIT_SUCCESS;
35 }

 


测试结果:

fan
lie
long
SK
love
SK
a
b
c
a
a
b
^Z
[SK] = 2
[a] = 3
[b] = 2
[c] = 1
[fan] = 1
[lie] = 1
[long] = 1
[love] = 1
View Code

我们可以看到用迭代器输出的结果是按照键(这里是string)的 " < " 逻辑(这里是s字典顺序)排序的

 

 

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#23种设计模式发布时间:2022-07-13
下一篇:
LinuxCentos7安装Oracle12c第二版本发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap