我們要先明白在哪個地方需要使用自定義排序:
sort對vector容器排序時,第三個引數為乙個函式,函式內容即為排序的要求。
1:當對可直接比較變數排序時,預設為公升序:
#include using namespace std;
//排序函式,自定義為降序
bool cmp2 (const int a, const int b)
int main()
2:對物件進行排序時,可以在類中使用過載運算子,也可以使用排序函式。
#include using namespace std;
struct node
node(int _a, int _b):a(_a), b(_b) {}
//過載運算子
bool operator < (const node& node) const
};//排序函式,注意,預設的排序方式為內部的過載運算子定義的排序方式
//sort使用cmp會替換預設的排序方式
bool cmp (const node node1, const node node2)
int main()
1:set儲存可直接比較變數。
#include using namespace std;
//根據字串長度排序
struct cmp
};int main()
2:set儲存物件
#include using namespace std;
struct node
node(string _str, int _a):
str(_str), a(_a) {}
bool operator < (const node& a) const
};struct cmp
};int main()
3:map和set一樣,但是map預設為對值key進行排序,這裡我們按照value進行排序。
#includeusing namespace std;
bool cmp(const pair& a, const pair& b)
int main()
); map1.insert();
//輸出新增的內容
for (auto iter = map1.begin(); iter != map1.end(); ++iter)
cout << endl;
// 將map中的內容轉存到vector中
vector> vec(map1.begin(), map1.end());
//對線性的vector進行排序
sort(vec.begin(), vec.end(), cmp);
for (int i = 0; i < vec.size(); ++i)
cout << vec[i].first << " " << vec[i].second << endl;
return 0;
}
STL中自定義排序的使用
參考 url url url color red b size large 強烈推薦文章 url b 如果要自己定義stl容器的元素類最好滿足stl容器對元素的要求 b color red b 必須要求 b color quote 1 copy建構函式 2 賦值 操作符 3 能夠銷毀物件的析構函式 ...
STL自定義比較器
struct person 自定義的比較器 struct comparebyage sort vec.begin vec.end comparebyage 排序傳入我們自定義的比較器map內部的實現使用的是樹,不能夠直接排序,我們可以將其放在乙個vector中,然後自定義乙個比較器去排序 map m...
STL 自定義比較器
說明 採用sort函式舉例 sort函式能夠接收2個形參 stl中的絕大多數用於查詢 排序的函式的前2個引數基本上都是乙個範圍 first,last 第3個引數一般是乙個比較器仿函式 即 設定大小比較原則compare 下面介紹5種常見的比較器定義手段 自定義普通比較器函式cmp include i...