关于Map的小问题!

jieleiping 2008-03-23 10:21:13
最近在学习map

遇到如下问题:
我有一个这样的map
KEY                Value
C 2
FAQ 2
If 2
In 1
Lite 2
a 1
all 3
allow 1
and 2
andor 2
any 1
author 1
commercial 1
conspicuously 1
copies 1
copy 2
copyright 1
course 1
display 1
do 1
document 4
dont 1
entire 2
event 1
first 1
following 1
for 2
from 1
get 1
granted 1
is 1
large 2
make 2
may 1
must 2
normally 1
not 1
notices 1
of 2
or 2
others 3
own 1
permission 2
personal 1
portions 2
provided 1
redistribute 2
restriction 1
retain 1
so 1
that 2
the 6
to 5
use 2
verbatim 1
want 2
whether 1
without 1
you 6
your 1



默认情况下是按照key排序的,可是我现在想找出value中的前五个最大值。

不知道有没有什么办法???
...全文
146 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
独孤过儿 2008-03-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jieleiping 的回复:]
忘了说一个问题

结构上只能是map而不能使用multimap。。。。

希望能有一些高效巧妙的算法
[/Quote]
那只能是排序了,而且我觉得这种情况下,用冒泡排序效率最高,因为只要循环五次,找出五个最大的就行了,其余的一律忽视...
jieleiping 2008-03-23
  • 打赏
  • 举报
回复
忘了说一个问题

结构上只能是map而不能使用multimap。。。。

希望能有一些高效巧妙的算法
abupie 2008-03-23
  • 打赏
  • 举报
回复
最简单,但没有效率的:
全遍历map查找value最大的几个。
野男孩 2008-03-23
  • 打赏
  • 举报
回复
key,value对调,他怎么存进去啊。。。。
独孤过儿 2008-03-23
  • 打赏
  • 举报
回复
有重复的那就用楼上说的multimap啊!
  • 打赏
  • 举报
回复
multimap
jieleiping 2008-03-23
  • 打赏
  • 举报
回复
value有重复值,这样也行么?
独孤过儿 2008-03-23
  • 打赏
  • 举报
回复
我能想到的最简单的方法是,把key和value对调...
ZiSheng 2008-03-23
  • 打赏
  • 举报
回复
呵呵,顶一下
独孤过儿 2008-03-23
  • 打赏
  • 举报
回复
学习了!强!!!

一会google一下大顶堆算法,学习一下
medie2005 2008-03-23
  • 打赏
  • 举报
回复
不要被OO骗了,我其实是菜鸟。C++方面更是要向你学习。

你说的很对。
循环五次当然可以,效率也非常好。
scrutin说的大顶堆也是非常好的,比循环五次要好。因为我们只要建一个5个节点的堆就可以了,按理论来说,这个算法的复杂度是O(nlog(5))=O(n)。实际上比我说的算法要好。
但是,其实建5个节点的堆好象有点大材小用了。

我提的那个算法只是一个经典的算法,STL已经实现了,但是不进行全排序,只是部分排序了,而且前5个最大值也是乱序的。在这里nth_element()可能有点杀鸡用牛刀了。
dorimifa001 2008-03-23
  • 打赏
  • 举报
回复
mark
独孤过儿 2008-03-23
  • 打赏
  • 举报
回复
阿诺大牛,用冒泡只需要循环五次就行了啊!它的题目只要求找出五个最大的就行!这个效率是恒定的啊

如果用那为兄弟说的“大顶堆来排序”,还能更高效吗?

这个题目是部分排序,不是全排序啊
medie2005 2008-03-23
  • 打赏
  • 举报
回复
算法可参考STL nth_element().
平均复杂度是O(n)的。常数因子大概是2到3左右。
独孤过儿 2008-03-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 scrutin 的回复:]
排序的话,用大顶堆来排序,循环一次就行
[/Quote]
能说下算法吗?我也想学学
scrutin 2008-03-23
  • 打赏
  • 举报
回复
排序的话,用大顶堆来排序,循环一次就行

64,675

社区成员

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

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