用hash_map统计出现次数最多的前N个URL

海量数据统计频率最高词汇的常规办法之一是先通过一个hash函数处理数据然后取模N,拆分为N个小文件,对每一个小文件进行词频统计和排序处理,然后归并N个小文件取频率最大的M个数。


下面程序是利用hash_map处理小文件词频的实现(堆排序部分的代码没加上,可以参见http://blog.csdn.net/wodet/article/details/16948511)

关于hash_map和map的选择使用有几点注意的,hash_map是hash表的形式实现的,map是红黑树的结构,时间复杂度前者为N*(logN),后者为O(log2N)以内.从稳定性来说map占优,从平均性能来看hash_map占优,还有hash_map目前没有纳入C++标准库,但是各个版本的STL都提供了实现。具体情况具体选择咯。。


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

class HashFunction {
public:
	size_t operator()(const string& s) const {
	unsigned long __h=0;
	for(size_t i=0;i HashMap;



int main(int argc, char* argv[]) {
	printf("%s","-=-=-=-=-=-=-=-=-=-=hash_map测试-=-=-=-=-=-=-=-=-=-=-=-=\n");
	HashMap obj;
	/*
	obj["10010"]="联通客服";
	obj["10086"]="移动客服";
	obj["1368351111"]="电话号码";
	obj["123456"]="你的密码";
	*/
	//构造关键字与次数的hash_map,即统计词频
	int ai[]={22,41,22,46,13,13,22,44,44};
	for(int i=0;i<9;i++) {
		char aa[12]={0};
		sprintf(aa,"%d",ai[i]);
		obj[aa]++;
		cout<first.c_str());
	stmp[j].count=itor->second;
	cout<


你可能感兴趣的:(hash)