問題:要對以map中的資料進行按value排序
難點:map中的資料是按照key排序的,用for迴圈進行迭代器輸出的順序,就是按照key排序的順序。但是按value排序就不可能了。
方案:
stl中的sort函式原型:
#include
using
namespace std;
template
<
class
randomaccessiterator
>
void sort ( randomaccessiterator first, randomaccessiterator last )
;template
<
class
randomaccessiterator
,class
compare
>
void sort ( randomaccessiterator first, randomaccessiterator last, compare comp )
;
顯然它需要乙個隨機迭代器,而這對於map物件來說也是不可能的。所以我們必須把key-value對抽取出來,放到乙個vector物件裡才行。為此,先定義乙個pair
typedef pairpp;
然後定義乙個comp函式
bool comp(pp i, pp j)
然後構造vector陣列,呼叫sort(vec.begin(), vec,end(), comp)就得到了排序結果。
這裡有乙個問題需要注意:在我的程式中,comp是定義在乙個類中的成員函式。開始的時候老是報錯:no matching function for call to 'sort(…), '。後來我把該成員定義成靜態函式,問題解決。原因可能和類成員函式的函式原型有關。所有成員函式都有乙個隱含的指標引數,即this。這就和sort需要的comp函式原型不一致了,所以就報錯了。而static函式就沒有這個隱含引數了-- 這個觀點僅供參考,求大牛斧正。
或者將 comp函式定義在類外也可以解決這個問題
STL sort函式 對map按值排序
問題 要對以map中的資料進行按value排序 難點 map中的資料是按照key排序的,用for迴圈進行迭代器輸出的順序,就是按照key排序的順序。但是按value排序就不可能了。方案 stl中的sort函式原型 include using namespace std template void s...
STL中map按值排序
map預設是按照鍵 key 排序的。很多時候我們需要按值 value 排序,靠map裡的 演算法當然是不行的,那麼可以把它轉存到vector中,在對vector按照一定的規則排序即可。示例 輸入單詞,統計單詞出現次數並按照單詞出現次數從多到少排序 include include include in...
Map的按value值排序
map自帶按key值排序的屬性,但很多種情況下我們需要對map容器進行按vaule值排序,由於map沒有提供相應的api,我們只有自力更生了。可以利用pair和自定義排序函式實現,比如我們拿leetcode上的347題為例,統計一組數中出現次數最多的k個數,如下 自定義的pair比較函式,此函式需要...