亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

關于C++中定義比較函數的三種方法小結

2020-01-26 14:24:01
字體:
來源:轉載
供稿:網友

C++編程優與Pascal的原因之一是C++中存在STL(標準模板庫)。STL存在很多有用的方法。

C++模板庫中的許多方法都需要相關參數有序,例如Sort()。顯然,如果你想對一個集合進行排序,你必須要知道集合中的對象,那個在前那個在后。因此,學會如何定義比較方法是非常重要的。

C++模板庫的許多容器需要相關類型有序,例如set<T> 和priority_queue<T>。

這篇文章旨在告訴大家如何為一個類定義一個排序方法,以便在STL容器或者方法中使用。 作為一個C++程序員,你應該知道這些方法。

如何定義排序?

簡而言之,為一個類定義排序,我們就可以知道類的任意兩個對象在排序的過程中誰在前誰在后。我們可以用一個方法來實現,這個方法返回一個bool值表示誰排在前面。顯然,我們希望實現一個類似,f(x,y),這種形式的方法。它接收同一類型的對象作為兩個參數,返回值則表明誰會出現在誰前面。

嚴格弱序化

幾乎所有的方法或容器都需要排序來滿足數學意義上的標準嚴格弱序化,否則這些方法或容器的行為將不可預知。

假設f(x,y)是一個比較函數。 如果該函數滿足如下條件則它是嚴格弱序化的。

1.f(x,x) = false;

2. if f(x,y) then !f(y,x)

3.if f(x,y) and f(y,z) then f(x,z)

4. if !f(x,y)&&!f(y,x) then x==y; if x==y and y==z then x==z;

看上去有點暈乎,不過不用擔心,只要你的比較方法能夠滿足對相等元素永遠返回false,那你的方法就滿足要求了。

三種實現方式:

1. 定義 < 操作符。

 使用這種方法可以使我們自定義的類能夠獲得與生俱來的排序能力。例如,如果有如下類:

struct Edge{int from,to ,weight;};

因為要實現Kruskai算法,你希望圖中的所有邊依據權重按降序排列。 像這樣來定義 operator<:

struct Edge{    int from,to ,weight;    bool operator <(Edge other) const    {        return weight>other.weight;    }   };  

你定義的方法必須按照如下方法聲明:

bool operator< (T other) const

注意: const關鍵字是必須的。

如果你不喜歡這種方式,比如,明明是要比較兩個對象,方法卻只有一個參數。你可以選擇如下方式:

 

struct Edge{  int from,to weight;  friend bool operator<(Edge a,Edge b)  {    return a.weight>b.weight;  }};

STL的pair<T1,T2>就具有與生俱來的排序能力。兩個pair對象的比較這樣的:先比較第一個參數,如果第一個參數相同再比較第二個參數。

所有內置類型都具有與生俱來的排序能力,這是由編譯器賦予的。

2. 自定義排序方法。

使用這種方式常常用在如下情形:

a.比較內置類型

b.不能修改需要比較的類型

c.除了類型自定義的比較方式以外的比較方法

簡單來說,一個比較方法接收兩個同類型的對象作為參數并且返回一個bool值,原型如下:

bool name(T a,T b);
 
3. 重載()操作符

我們可以將比較函數作為STL容器構造函數的第一個參數,并且把函數類型作為模板參數。例如:

set<int,bool (*)(int,int)> s(cmp);

這樣做或多或少會讓人費解。那我們就來看看如何使用仿函數來消除你的疑惑吧。

我們需要定義一個新的類并重載()操作符。

vector<int> occurrences; struct cmp {   bool operator()(int a, int b)   {     return occurrences[a] < occurrences[b];  } };

現在我們就可以把這個類作為模板參數傳遞給STL容器了。

set<int, cmp> s; priority_queue<int, vector<int>, cmp> pq;

STL也有一些內置的仿函數,例如less<T>,greater<T>等。

仿函數可以通過初始化然后像普通函數一樣使用。最簡單的就是在仿函數后面加上()。

sort(data.begin(), data.end(), greater<int>());

以上就是小編為大家帶來的關于C++中定義比較函數的三種方法小結全部內容了,希望大家多多支持武林網~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩一区二区在线| 色先锋资源久久综合5566| 日本精品久久电影| 国产精品中文字幕在线观看| 日韩精品视频观看| 粉嫩av一区二区三区免费野| 欧美在线视频一区二区| 亚洲成色777777在线观看影院| 亚洲成人在线视频播放| 午夜精品福利电影| 激情亚洲一区二区三区四区| 国产精品免费电影| 5252色成人免费视频| 久久久久久成人| 亚洲精品第一页| 青青久久av北条麻妃黑人| 日韩成人在线网站| 国产精品美女久久久久久免费| 日韩成人在线视频| 视频在线观看99| 日韩精品高清在线观看| 日韩综合视频在线观看| 久久99精品久久久久久噜噜| 国产精品一区二区三区毛片淫片| 在线一区二区日韩| 亚洲片在线观看| 亚洲free嫩bbb| 热久久美女精品天天吊色| 97国产精品人人爽人人做| 亚洲欧美日韩天堂一区二区| 亚洲免费福利视频| 国内精品久久久久影院优| 国产欧美日韩精品丝袜高跟鞋| 91九色综合久久| 中文字幕免费精品一区高清| 亚洲欧美综合图区| 97色伦亚洲国产| 91a在线视频| 超碰精品一区二区三区乱码| 午夜欧美不卡精品aaaaa| 亚洲第一av在线| 亚州精品天堂中文字幕| 欧美精品成人在线| 国产精品久久久| 久久99视频精品| 中文字幕欧美精品日韩中文字幕| 91国产中文字幕| 激情久久av一区av二区av三区| 欧美性猛交xxxx久久久| 色综合久久88色综合天天看泰| 成人综合国产精品| 欧洲永久精品大片ww免费漫画| 精品亚洲一区二区三区四区五区| 在线看日韩av| 97精品久久久| 136fldh精品导航福利| 成人激情在线观看| 日韩一区二区精品视频| 国产精品成人aaaaa网站| 亚洲国产成人精品一区二区| 91在线精品视频| 亚洲第一福利网站| 91国产视频在线播放| 久久久久在线观看| 国产精品三级美女白浆呻吟| 日韩国产精品亚洲а∨天堂免| 国产精品第3页| 亚洲精品中文字幕av| 欧美黄网免费在线观看| 国产精欧美一区二区三区| 久久av红桃一区二区小说| 国产精品免费看久久久香蕉| 国语自产偷拍精品视频偷| 亚洲欧美日韩在线高清直播| 日韩中文字幕网| 日韩av在线精品| 国产精品18久久久久久首页狼| 欧美日韩激情小视频| 久久成人精品电影| 国产成人拍精品视频午夜网站| 日本高清+成人网在线观看| 91精品在线影院| 欧美第一黄网免费网站| 午夜精品视频网站| 午夜精品久久久久久久白皮肤| 日本精品视频网站| 国产成人精品av| 久久久影视精品| 91精品国产网站| 亚洲国产毛片完整版| 狠狠躁天天躁日日躁欧美| 日韩美女主播视频| 91人成网站www| 久久综合国产精品台湾中文娱乐网| 亚洲aⅴ日韩av电影在线观看| 久久精品国产清自在天天线| 久久久国产精品x99av| 欧美性猛交xxxx久久久| 欧美巨大黑人极品精男| 日韩美女在线播放| 亚洲性69xxxbbb| 中文字幕视频在线免费欧美日韩综合在线看| 国产精品视频久久| 欧美一级成年大片在线观看| 久久精品国产一区二区三区| 日韩中文字幕国产精品| 国内精品美女av在线播放| 久久久久这里只有精品| 国产成人亚洲综合91| 国产亚洲美女久久| 成人福利视频网| 精品福利视频导航| 国产精品久久久久久av| 久久精品久久久久久| 中文字幕精品久久久久| 97香蕉久久超级碰碰高清版| 色悠悠久久久久| 国产精品第七影院| 一本色道久久88综合亚洲精品ⅰ| 国产精品美女免费看| 91精品国产色综合| 中日韩美女免费视频网站在线观看| 久久久www成人免费精品| 亚洲欧美一区二区精品久久久| 欧美精品久久久久久久久| 亚洲性线免费观看视频成熟| 中文字幕日韩av电影| 国产91精品不卡视频| 国产在线精品自拍| 国产不卡精品视男人的天堂| 国语自产精品视频在线看抢先版图片| 亚洲福利视频二区| 国产成人一区二区三区电影| 国产精品久久久久不卡| 亚洲全黄一级网站| 亚洲欧美国产精品| 欧美性理论片在线观看片免费| 性亚洲最疯狂xxxx高清| 久久九九精品99国产精品| 精品国产区一区二区三区在线观看| 欧美福利小视频| 成人在线观看视频网站| 日产日韩在线亚洲欧美| 欧美日产国产成人免费图片| 亚洲国产精品电影在线观看| 国产精品三级久久久久久电影| 4p变态网欧美系列| 岛国视频午夜一区免费在线观看| 欧美在线视频网| 国产精品久久在线观看| 久久综合88中文色鬼| 国内精品一区二区三区| 91午夜理伦私人影院| 51色欧美片视频在线观看| 亚洲成人av片| 精品国产一区二区三区久久久狼| 欧美精品在线第一页| 久久久久久国产免费| 麻豆一区二区在线观看| 欧美精品videos| 久久综合色88| 国产精品一区久久| 国产精品极品尤物在线观看| 最新亚洲国产精品|