C STL中Map的按Value排序

2021-09-07 07:15:02 字數 1355 閱讀 6004

那麼我們如何實現對pair按value進行比較呢? 第一種:是最原始的方法,寫乙個比較函式;  第二種:剛才用到了,寫乙個函式物件。這兩種方式實現起來都比較簡單。

typedef pairint> pair;  

bool cmp_by_value(const pair& lhs, const pair& rhs)   

struct cmpbyvalue   

};  

接下來,我們看下sort演算法,是不是也像map一樣,可以讓我們自己指定元素間如何進行比較呢?

template   

void sort ( randomaccessiterator first, randomaccessiterator last );  

template   

void sort ( randomaccessiterator first, randomaccessiterator last, compare comp );  

我們看到,令人興奮的是,sort演算法和map一樣,也可以讓我們指定元素間如何進行比較,即指定compare。需要注意的是,map是在定義時指定的,所以傳參的時候直接傳入函式物件的類名,就像指定key和value時指定的型別名一樣;sort演算法是在呼叫時指定的,需要傳入乙個物件,當然這個也簡單,類名()就會呼叫建構函式生成物件。

這裡也可以傳入乙個函式指標,就是把上面說的第一種方法的函式名傳過來。(應該是存在函式指標到函式物件的轉換,或者兩者呼叫形式上是一致的,具體確切原因還不明白,希望知道的朋友給講下,先謝謝了。)

【參考**】

int main()   

return 0;  

}  

【執行結果】

Map的按value值排序

map自帶按key值排序的屬性,但很多種情況下我們需要對map容器進行按vaule值排序,由於map沒有提供相應的api,我們只有自力更生了。可以利用pair和自定義排序函式實現,比如我們拿leetcode上的347題為例,統計一組數中出現次數最多的k個數,如下 自定義的pair比較函式,此函式需要...

map按key和按value排序

看乙個題 查詢和排序 題目 輸入任意 使用者,成績 序列,可以獲得成績從高到低或從低到高的排列,相同成績 都按先錄入排列在前的規則處理。例示 jack 70 peter 96 tom 70 smith 67 從高到低 成績 peter 96 jack 70 tom 70 smith 67 從低到高 ...

map按key和value排序

map集合按照key和value排序 按value排序 利用集合中的entry封裝,然後利用內部函式描述比較過程,這裡有兩種方式,可以發現其中的o1和o2表示map中的值,o1其實是偏大的那乙個,然後返回的時候其實是將較大的放在後面。mapmap new treemap map.put b 1 ma...