簡體   English   中英

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

[英]How to find largest values in C++ Map

我在“數據結構”課程中的老師給了我們一個作業,讓他讀一本書並計算有多少個單詞。 那不是全部; 我們需要顯示100個最常用的單詞。 我的直覺說要對地圖進行排序,但是我只需要100個單詞即可。 谷歌搜索之后,是否有一個“教科書答案”可以按值而不是鍵對地圖進行排序?

我懷疑是否有“教科書答案”,答案是否定的:您無法按值對地圖進行排序。

您始終可以使用這些值創建另一個map 但是,這不是最有效的解決方案。 我認為最好的方法是將這些值插入priority_queue ,然后彈出前100個。

請注意,您不需要將單詞存儲在第二個數據結構中。 您可以存儲指向單詞的指針或引用,甚至可以存儲map::iterator

現在,您可以考慮另一種方法。 那就是在建立第一張地圖時,要保持前100名候選人的競選順序。 這樣,就無需進行第二遍和構建額外的結構,正如您所指出的那樣,這是浪費的。

為了有效地做到這一點,您可能會使用類似堆的方法,並在每次更新值時進行冒泡。 由於單詞的數量只會增加,因此非常適合該堆。 但是,您會遇到維護問題。 也就是說:如何引用值在堆中的位置,並跟蹤落在底部的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM