有熟悉C++ STL中的hash_set吗?

bmywindy 2006-05-21 01:13:50
一个统计的程序题目。我用了链表,静态数组好多算法,查找效率都很慢。听说hash_set处理这个非常快,具体是怎么实现的?设计题目大概如下:

txt文件数据格式如下:
6 51 44901 219.245.168.33 8722 211.142.48.89 23626
6 37 53258 219.150.217.88 80 202.117.218.112 1583
6 19 2516 202.200.229.44 80 202.100.222.46 80
6 3 202 219.142.59.101 46205 219.245.186.227 22174
6 370 161368 202.116.7.12 1639 219.245.186.139 4805

要求用hash_set最快速度地统计出第5列(从1到65536)出现的不同数字,并有出现的次数,并按次数多少排序,输出前三名信息
如上文本信息,输出为
出现最多的是80:次数为2
第二是8722:次数为1
第三是46205:次数是1
并能输出关键字所在行的其他信息
...全文
733 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bmywindy 2006-05-22
  • 打赏
  • 举报
回复
读入一行我是这样写的,这里很慢
ifstream fin("0.txt");
if (!fin)
{
cout << "Can't open file - " << argv[1]<< "\nUseage : countch filename" << endl;
return 1;
}
while (getline(fin, row)) //以行为单位读入文件
..........
bmywindy 2006-05-22
  • 打赏
  • 举报
回复
我现在考虑用getline读入的问题,这块好像太慢了,只读入不进行任何操作都需要很长时间,大伙给帮帮忙啊,看有无其他办法?
Wolf0403 2006-05-22
  • 打赏
  • 举报
回复
瓶颈未必在这里呢?看看 I/O 的处理,内存的分配等等。。
sharpdew 2006-05-22
  • 打赏
  • 举报
回复
那把你代码贴出来,让大家给优化一下
bmywindy 2006-05-22
  • 打赏
  • 举报
回复
我做的最后速度太慢,和java的处理速度相差很大,我的需要半个小时。java用hash_set做的只处理了几秒。我不知道问题出在哪?所以聆听指教。ps:MSDN上的我看过了。
sharpdew 2006-05-22
  • 打赏
  • 举报
回复
都告诉你用hash_map了,何况msdn上把其用法写得够详细了,你还要源码,是不是有点过分,呵呵
bmywindy 2006-05-22
  • 打赏
  • 举报
回复
谁能给出个源码?
bmywindy 2006-05-21
  • 打赏
  • 举报
回复
map系列对关键字进行比较排序好像也没什么作用,最后排序的是按关键字出现的次数来排的。
bmywindy 2006-05-21
  • 打赏
  • 举报
回复
那么符合这个要求的最快的。要有键有值也有排序。mulitmap好像没hash的快。现在要求算法执行时间尽可能短,用哪个最合适?
guyanhun 2006-05-21
  • 打赏
  • 举报
回复
mulitmap .
guyanhun 2006-05-21
  • 打赏
  • 举报
回复
hash 的话,要求一个hash 算法的选择问题。
一般来说,应该是这样的,hash 的比map 的要快,
内存也要相对大一点。
sharpdew 2006-05-21
  • 打赏
  • 举报
回复
因为需要记录键key以及value,所以需要hash_map
使用方法和map的方法一致:
hash_map<double,int> hm;
hm[key] = value;
hash_map和map只是内部存储结构和查找算法不一样,一个用hash算法,一个用rbtree,红黑树。
guyanhun 2006-05-21
  • 打赏
  • 举报
回复
hash_set 我也没有看出什么好处来 -_-
delphihero 2006-05-21
  • 打赏
  • 举报
回复
有重复的用也是 hash_mulitset,但hash_set并不排序。而且set只有键没有值得说

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧