自定義結構體在map中的排序方式

2021-10-02 21:46:56 字數 1089 閱讀 7491

在sort中,我們可以寫乙個cmp的排序bool函式,再加入sort中

如sort(a,a+n,cmp)

在map中,如果key是int或string,這個map會自動進行排序,如果key是乙個定義的結構體,這時我們就需要乙個排序規則,

所以我們這樣寫試試

mapint,cmp>m;
果然,編譯不過去。

看來,寫乙個cmp函式的辦法是行不通的

那我們怎麼對key是結構體的map排序呢?

這裡我寫了兩種,原理都一樣,比較簡單,當然也有其他的寫法,其實原理都是一樣的,對它進行過載

第一種

struct people

;bool

operator

<

(const people &a,

const people &b)

;

我們定義了我們的結構體後,我們就給他乙個排序的規則,這樣我們只要是這個規則裡的結構體(這裡的people),不管他到了天涯海角,**的任何地方,他都會依據這個規則來進行排序。

第二種

看起來更簡潔

struct people

};

我們在定義結構體中就加入排序規則,**和剛剛的幾乎一樣,把剛剛bool中的東西全部搬到上面來,在前面加乙個friend,去掉多餘的那乙個分號,就ok了!

其實,這兩種辦法不僅是在map中有用,只要是需要結構體排序的,都可以不用寫cmp,直接在定義他的時候就可以加上。

所以,如果我們是這樣定義結構體的,我們寫sort就可以直接寫sort(a,a+n),是不是很棒呢!

當然,我們也要具體題目具體分析,有的題目要求你先用這種排序,再用另一種排序,就老老實實寫兩個cmp來sort吧,這僅實用於結構體只有一種要求的排序情況。

C 結構體自定義排序

宣告 本機無c 環境,以下 均沒有編譯測試,最近golang寫的比較多,語法可能會有問題,請自行測試 sort排序函式簡單使用 include using namespace std int a 100 bool cmp1 int x,int y bool cmp2 int x,int y int ...

C 中,自定義結構體vector的排序

c 中當 vector 中的資料型別為基本型別時我們呼叫std sort函式很容易實現 vector中資料成員的公升序和降序排序,然而當vector中的資料型別為自定義結構體型別時,我們該怎樣實現公升序與降序排列呢?有兩種方法,下面的例子能很好的說明 方法1 我們直接來看 吧,比較簡單,容易理解 i...

在spacemacs emacs中自定義方向鍵

這裡會講怎麼在emacs,或者spacemacs裡對映方向按鍵。在使用spacemacs的emacs裡,使用evil得到vim方式操作,在normal模式下移動方向鍵是h,j,k,l。但寫 時經常會遇到一類問題,在insert模式時,當輸入前半括號時,自動補全另一半括號,這時游標位於括號內,當時想繼...