如何在C ++ Map中找到最大值

时间:2013-07-02 02:52:19

标签: c++ sorting map stl

我的数据结构课程中的老师给了我们一本书,可以读书,并计算有多少单词。那不是全部;我们需要显示100个最常用的单词。我的直觉说要对地图进行排序,但我只需要地图中的100个单词。谷歌搜索后,是否有一个“教科书答案”按值而不是键排序地图?

1 个答案:

答案 0 :(得分:1)

我怀疑是否有“教科书答案”,答案是否定的:你不能按价值对地图进行排序。

您始终可以使用值创建另一个map。但是,这不是最有效的解决方案。我认为更好的方法是将值放入priority_queue,然后弹出前100个。

请注意,您无需将字存储在第二个数据结构中。您可以存储指向该词的指针或引用,甚至可以存储map::iterator

现在,你可以考虑另一种方法。这是为了在构建第一张地图时保持前100名候选人的运行顺序。这样就没有必要进行第二次传递,并建立一个额外的结构,正如你所指出的那样,这是浪费。

为了有效地执行此操作,您可能会使用类似堆的方法,并在更新值时进行冒泡。由于单词计数只会增加,这非常适合堆。但是,您手上会遇到维护问题。那就是:如何引用堆中值的位置,以及跟踪从底部掉落的值。