【博客101】使用map与unordered_map统计出现频率

内容:当我们需要统计出现的频率最高的K个某种属性的时候,比如一堆字符串中出现次数最多的前N个的这种情况,可以使用map与unordered_map来配合使用

方法:
1.使用unordered_map来对字符串进行次数的统计,以字符串为键,出现次数为值
2.将unordered_map统计的结果插入到map中,此时map的键是出现次数,值是字符串
(此时map的值可以是一个vector,存的是出现次数为这么多的字符串集合)
3.此时拿到的map就是一个以字符串出现的次数为排序依据的map了,值为字符串值

经过了这些步骤,你再需要找前N个出现次数最多的字符串值就很好找啦,因为map底层是红黑树啦,所有最小的是它的最左结点,最大是它的最后结点。在有序结构找前N个就好找啦。如果你就统计完的unordered_map找前N个那么你就不太好在线性时间复杂度内完成了。

统计的时候使用map和unordered_map区别:
1.map是基于红黑树的,结点其实是一个pair(c++的一个类模板,表示一对键值),查找和插入的时候是lgn的时间复杂度,然后它可以比unordered_map省空间,当数据不是特别多的时候。

2.unordered_map的查找和插入是O(1)的时间复杂度,它会比map更快,但是它是基于哈希表,采用拉链法的,然后哈希表的空间一般是一开始分配好的,后面当不够用而出现冲突太多的时候,是需要重建表的,所以一般哈希表一开始就需要分配一定的空间了,所以在空间上花费当数据不是特别多时要比map花费更多,哈希表其实是一种空间换时间的思维。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值