STL sort函式 對map按值排序

2021-09-12 23:33:16 字數 1198 閱讀 5084

問題:要對以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比較函式,此函式需要...