STL自定義排序小結

2021-09-11 18:01:41 字數 1650 閱讀 8133

我們要先明白在哪個地方需要使用自定義排序:

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...