開啟章節選單
自定義比較
常見在上個章節我們介紹了 sort
函式,這個函式可以幫助我們對容器進行排序。不過先前的例子都是按照預設的排序方式,也就是升序排序,那能不能自訂排序方式呢?當然可以,sort
函式還提供了第三個非必填的參數,讓你能夠傳入一個自定義的比較函式來決定排序的方式。
比較函式
首先我們要先傳入一個自訂比較函式 cmp
,名子可以自訂:
sort(v.begin(), v.end(), cmp);
接著就是撰寫比較函式。函式名稱必須跟傳入 sort
的一樣,並且回傳型態需要是 bool
。這個函式會傳入兩個參數,分別是要比較的兩個值 和 ,你要回傳的布林值表示「 是否需要排在 前面」,根據回傳的數值讓 sort
決定是否交換值的位置。
bool cmp(int a, int b) { return a > b; }
這個比較函式會讓 sort
進行降序排序。
內建的比較函式
像是升序排序、降序排序這種常見的排序方式,難道每次都要自己寫一遍比較函式嗎?當然不用!C++ 提供了一些內建的比較函式,讓你可以直接使用。
第一個就是 greater
,這個函式會讓 sort
進行降序排序:
sort(v.begin(), v.end(), greater<int>());
greater
後面的角括號中要填入你要比較的資料型態,這邊我們填入 int
,當然如果你想的話也可以填入其他的資料型態。比如說你要比較浮點數,就可以填入 double
。
sort(v.begin(), v.end(), greater<double>());
另外一個常見的比較函式是 less
,這個函式會讓 sort
進行升序排序:
sort(v.begin(), v.end(), less<int>());
就像 greater
一樣,less
後面的角括號中也要填入你要比較的資料型態。
小測驗
比較函式 bool cmp(a, b)
的回傳值的意義是什麼?