经典单词计数程序

题目要求:

统计每个单词在输入中出现的次数

解决办法:

用标准库中的map来存储单词以及出现的次数。

这里会出现两种方法:

方法一、下标法

#include "pch.h"
#include <iostream>
#include<map>
#include<set>
#include<string>
using namespace std;
int main()
{
	map<string, size_t> word_cout;    //定义一个map类型,key为string类型,vlue为size_t类型
	string word;
	while (cin >> word) {
		++word_cout[word];         //这一句非常关键,这里用了下标,当有word这个关键字的时候,value加1,如果没有的化,创建一个
	}                          //key为word,赋初值vlue为0,然后++
	for (const auto& a : word_cout) {
		cout << a.first << " " << a.second << endl;
	}
}
/*总结:这里呢,对map对象进行下标时,根据key的值来返回vlue,如果没有的话,就会创建一个节点
*/

方法二:insert插入法

#include "pch.h"
#include <iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
	map<string, size_t> a;
	string word;
	while (cin >> word) {
		pair<map<string, size_t>::iterator, bool> b=a.insert({word,1});
		if (!b.second)
			++b.first->second;     //这里这句也是关键哦
	}
	for (auto b = a.begin(); b != a.end(); ++b) {
		cout << b->first << " " << b->second << endl;
	}
}
//完美了,太棒啦!!!


这两种方式中都有特别精妙的地方所在。下标法中++word_cout[word]算是非常的精妙了。

分析:

1.如果word_cout中没有key为word的元素pair,就会创建一个,并且value初值为0,然后++,就会变成1.

2.如果wod_cout中有key为word的元素pair,不会添加,而word_cout[word],就是key为word对用的value,然后对value++。

第二种方式相对来说更好理解。

通过map容器中的成员函数insert来进行插入。如果已经有key为word的元素,不会插入新的值。insert函数返回一个pair对象,first成员变量是一个迭代器,second成员是一个bool类型变量,如果word_cout中已经存在key为word的元素,则返回中bool值为false.如果插入了新的元素,则bool为true.

程序中如果插入了新的元素,直接将他value赋值为1.。代表新插入的元素出现了一次。

如果已经存在了,则会进入if条件中,将对应的value++。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Reduce单词计数是一种常见的数据分析技术,它可以对大规模数据进行快速的单词计数。其基本思想是将数据分成若干个小块,然后在每个小块上进行单词计数,最后将结果合并起来得到最终的单词计数结果。下面是一个Python实现的MapReduce单词计数示例代码: ```python #!/usr/bin/env python import sys # 读取输入数据 for line in sys.stdin: # 去除首尾空格 line = line.strip() # 按空格分割单词 words = line.split() # 输出每个单词计数为1 for word in words: print('%s\t%s' % (word, 1)) ``` 上述代码中,首先从标准输入读取数据,然后对每行数据进行处理,将每个单词计数设置为1,并输出到标准输出。接下来,我们需要使用Hadoop MapReduce框架来运行这个程序。具体步骤如下: 1. 将上述代码保存为wordcount_mapper.py文件,并上传到Hadoop集群上的某个目录中。 2. 使用以下命令将数据输入到Hadoop集群中: ``` hadoop fs -put input_file input_folder ``` 其中,input_file是要处理的数据文件,input_folder是HDFS上的文件夹。 3. 使用以下命令运行MapReduce程序: ``` hadoop jar hadoop-streaming.jar \ -input input_folder \ -output output_folder \ -mapper "python wordcount_mapper.py" \ -reducer "python wordcount_reducer.py" \ -file wordcount_mapper.py \ -file wordcount_reducer.py ``` 其中,hadoop-streaming.jar是Hadoop提供的一个工具,用于运行MapReduce程序。-input参数指定输入数据的路径,-output参数指定输出结果的路径,-mapper参数指定Mapper程序的命令,-reducer参数指定Reducer程序的命令,-file参数指定需要上传到Hadoop集群的文件。 4. 使用以下命令将结果从Hadoop集群中下载到本地: ``` hadoop fs -get output_folder output_file ``` 其中,output_folder是HDFS上的输出文件夹,output_file是本地文件系统上的输出文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值