STL 自定義比較器

2021-09-24 11:42:30 字數 1817 閱讀 6998

說明:

採用sort函式舉例(sort函式能夠接收2個形參)

stl中的絕大多數用於查詢排序的函式的前2個引數基本上都是乙個範圍[first, last],第3個引數一般是乙個比較器仿函式(即: 設定大小比較原則compare)

下面介紹5種常見的比較器定義手段:

① 自定義普通比較器函式cmp

#include

#include

#include

#include

using namespace std;

// [1] 自定義比較器函式cmp,用於sort排序

bool cmp

(pair<

int,

int>

& a, pair<

int,

int>

& b)

intmain()

② stl自帶的仿函式 greater()

int

main()

③ 定義全域性的 operator< 函式

#include

#include

#include

using namespace std;

class node};

// 定義全域性的operator< ,引數是const

bool operator<

(const node& a,

const node& b)

intmain()

);system

("pause");

}

④ vector 的仿函式類的物件

#include

#include

#include

using namespace std;

class node};

// [仿函式類]

class cmpasc};

// [仿函式類]

class cmpdesc};

intmain()

);system

("pause");

}

⑤ set / mutilset / map / mutilset 自動排序

說明:set / mutilset / map / mutilset 是基於紅黑樹結構的,當插入元素的時,元素會自動排序(排序的規則可以人為的指定),詳細步驟如下(3步):

[1] 定義仿函式類,重寫operator()

classcmpasc//重寫()運算子

};[2] 建立容器物件set,通過第2引數 cmpasc指定插入元素的排序規則

multiset set;

[3] 插入元素時,會按照 cmpasc 定義的大小比較規則排序

set.emplace(___);

#include

#include

#include

using namespace std;

class node};

//方式3:

class cmpasc};

class cmpdesc};

void

test01()

void

test02()

intmain()

STL自定義比較器

struct person 自定義的比較器 struct comparebyage sort vec.begin vec.end comparebyage 排序傳入我們自定義的比較器map內部的實現使用的是樹,不能夠直接排序,我們可以將其放在乙個vector中,然後自定義乙個比較器去排序 map m...

C 自定義迭代器(STL)

一.iterator traits 迭代器萃取機 include template struct iterator traits 假如我們定義了乙個迭代器myiterator template void my swap iter a,iter b 當函式 以乙個迭代器為引數時,會出現這樣乙個尷尬,t...

python3 自定義比較器

摘要 在一些場景中,需要重新對已有的資料排序,可能所給出的資料型別或者資料數量較多,需要給定排序規則。import functools def by score t1,t2 if t1 0 t2 0 return 1 elif t1 0 t2 1 return 1 elif t1 1 t2 1 re...