在上個章節我們介紹了 sort 函式,這個函式可以幫助我們對容器進行排序。不過先前的例子都是按照預設的排序方式,也就是升序排序,那能不能自訂排序方式呢?當然可以,sort 函式還提供了第三個非必填的參數,讓你能夠傳入一個自定義的比較函式來決定排序的方式。
比較函式#
首先我們要先傳入一個自訂比較函式 cmp ,名子可以自訂:
sort(v.begin(), v.end(), cmp);
接著就是撰寫比較函式。函式名稱必須跟傳入 sort 的一樣,並且回傳型態需要是 bool。這個函式會傳入兩個參數,分別是要比較的兩個值 \(a\) 和 \(b\),你要回傳的布林值表示「 \(a\) 是否需要排在 \(b\) 前面」,根據回傳的數值讓 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 後面的角括號中也要填入你要比較的資料型態。
