本帖最後由 呂晉豪 於 2024-7-22 19:04 編輯
sort函式可以將陣列排序,有兩種用法:
1. sort(first, last);
first, last皆為陣列元素的指標(地址),排序的範圍為[first, last),也就是左包含右不包含,這種排序預設是由小排到大。
用法:- #include <bits/stdc++.h>
- using namespace std;
- int main() {
- int arr[] = {5, 4, 3, 2, 1};
- vector <int> v({5, 4, 3, 2, 1});
- sort(begin(arr), end(arr));
- for (int i = 0; i < 5; i++) {
- cout << arr[i] << " ";
- }
- cout << endl;
- sort(begin(v), end(v));
- for (int i = 0; i < 5; i++) {
- cout << v[i] << " ";
- }
- cout << endl;
- return 0;
- }
複製代碼 2. sort(first, last, cmp);
此為自訂排序,如果想由大排到小,或者是對結構體排序,就要用這種方法。
排序的範圍仍然為[first, last),比較特別的是cmp這個東西,他是一個函式(指標)。
用法(由大排到小):- #include <bits/stdc++.h>
- using namespace std;
- bool cmp (int a, int b) {
- return a > b;
- }
- int main() {
- int arr[] = {1, 2, 3, 4, 5};
- vector <int> v({1, 2, 3, 4, 5});
- sort(begin(arr), end(arr), cmp);
- for (int i = 0; i < 5; i++) {
- cout << arr[i] << " ";
- }
- cout << endl;
- sort(begin(v), end(v), cmp);
- for (int i = 0; i < 5; i++) {
- cout << v[i] << " ";
- }
- cout << endl;
- return 0;
- }
複製代碼 cmp函式會回傳布林值,函式的參數形態要跟陣列的型態一樣,以上例來說,可以想像成a在前面,b在後面,a>b代表前面的要比後面的大,也就是由大排到小。
用法(排序結構體):- #include <bits/stdc++.h>
- using namespace std;
- struct data {
- int c;
- int d;
- };
- bool cmp1 (data a, data b) {
- return a.c > b.c;
- }
- bool cmp2 (data a, data b) {
- return a.d > b.d;
- }
- int main() {
- vector <data> v(5);
- v[0] = {1, 5};
- v[1] = {2, 4};
- v[2] = {3, 3};
- v[3] = {4, 2};
- v[4] = {5, 1};
- sort(begin(v), end(v), cmp1);
- for (int i = 0; i < 5; i++) {
- cout << v[i].c << " " << v[i].d << endl;
- }
- cout << endl;
- sort(begin(v), end(v), cmp2);
- for (int i = 0; i < 5; i++) {
- cout << v[i].c << " " << v[i].d << endl;
- }
- cout << endl;
- return 0;
- }
複製代碼 |