說明:
採用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...