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

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

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

2020-05-23 13:59:43
字體:
來源:轉載
供稿:網友

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++中定義比較函數的三種方法小結全部內容了,希望大家多多支持VEVB武林網~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品高清一区二区三区| 91久久精品一区| 91久久精品国产91久久| 国产婷婷成人久久av免费高清| 日韩有码在线观看| 色老头一区二区三区| 成人精品视频久久久久| 国产日韩欧美视频在线| 日韩av免费看| 亚洲情综合五月天| 亚洲视频axxx| 久久成人18免费网站| 国产精品视频1区| 中文字幕精品一区二区精品| 欧美日韩成人网| 国产亚洲一区二区在线| 成人激情在线观看| 另类少妇人与禽zozz0性伦| 操人视频在线观看欧美| 亚洲国产精品va在看黑人| 国产成人精品电影| 亚洲视频电影图片偷拍一区| 国产成人精品免高潮在线观看| 日韩在线视频国产| 北条麻妃99精品青青久久| 欧美性猛交xxxx偷拍洗澡| 岛国av午夜精品| 久久精品中文字幕一区| 国产精品久久久久久久一区探花| 欧美最顶级的aⅴ艳星| 久久精品视频导航| 中文字幕在线视频日韩| 日韩中文字在线| 在线观看日韩www视频免费| 最近2019好看的中文字幕免费| 亚洲xxx自由成熟| 欧美日韩一区二区免费视频| 亚洲激情小视频| 成人深夜直播免费观看| 午夜精品一区二区三区在线播放| 欧美精品一区在线播放| 综合136福利视频在线| 97色在线视频| 日韩最新av在线| 欧美激情精品久久久久久大尺度| 精品无人区乱码1区2区3区在线| 性亚洲最疯狂xxxx高清| 欧美裸体xxxx极品少妇软件| 欧美裸身视频免费观看| 国产美女久久久| 国内精品久久久久久中文字幕| 最近中文字幕2019免费| 国产精品稀缺呦系列在线| 欧美日韩亚洲91| 美日韩精品免费视频| 国产91热爆ts人妖在线| 国产精品入口夜色视频大尺度| 精品久久久久人成| 午夜精品一区二区三区在线视| 中文字幕国产精品| 中文字幕亚洲欧美日韩高清| 97国产suv精品一区二区62| 久久久久久香蕉网| 亚洲国产精品网站| 国产成人久久久| 亚洲成成品网站| 国产亚洲aⅴaaaaaa毛片| 欧美极品欧美精品欧美视频| 成人国产精品一区| 国产精品电影久久久久电影网| 欧美性受xxxx黑人猛交| 国产日韩一区在线| 久久精品国产久精国产思思| 日韩国产在线看| 国产午夜精品视频免费不卡69堂| 高清一区二区三区四区五区| 97视频网站入口| 国产日本欧美在线观看| 日韩精品在线播放| 国产日韩欧美另类| 欧美裸体xxxx| 久久91亚洲人成电影网站| 亚洲一级免费视频| 亚洲欧洲成视频免费观看| 欧美乱大交xxxxx| 日韩精品欧美激情| 亚洲欧美国产一本综合首页| 成人黄色在线免费| 亚洲国产成人久久综合一区| 国产精品一区二区久久久久| 久久综合亚洲社区| 亚洲无限乱码一二三四麻| 久久精品亚洲国产| 国产精品久久久久久久久久新婚| 92国产精品久久久久首页| 欧美激情第1页| 亚洲成人中文字幕| 国产福利视频一区二区| 中文字幕日韩综合av| 91免费的视频在线播放| 国产不卡一区二区在线播放| 欧美极品美女电影一区| 亚洲欧美国产精品专区久久| 久久精品成人欧美大片| 亚洲人成毛片在线播放| 欧美劲爆第一页| 久久久亚洲精品视频| 国产视频欧美视频| 亚洲天堂精品在线| 欧美最顶级的aⅴ艳星| 国产精品久久久一区| 丝袜美腿亚洲一区二区| 亚洲精品久久久久久久久久久久久| 久久青草福利网站| 亚洲无亚洲人成网站77777| 欧美视频一区二区三区…| 91精品国产91久久久久福利| 欧美专区在线视频| 日韩欧美高清视频| 中文字幕久久精品| 欧美成人午夜影院| 国产精品一区二区三区久久| 亚洲黄色在线观看| 欧美成人精品影院| 色婷婷av一区二区三区久久| 国产精品成人播放| 欧美一区二区三区免费观看| 国产免费观看久久黄| 国产欧美日韩中文| 亚洲天堂成人在线视频| 一本色道久久综合狠狠躁篇怎么玩| 日韩av在线最新| 久久九九有精品国产23| 亚洲精品欧美日韩| 日韩av免费看| 97在线看免费观看视频在线观看| 国产丝袜一区二区三区免费视频| 国产亚洲人成网站在线观看| 亚洲欧洲激情在线| 狠狠操狠狠色综合网| 日本精品视频在线播放| 亚洲三级 欧美三级| 日韩精品福利网站| 亚洲欧美激情四射在线日| 精品欧美国产一区二区三区| 亚洲性xxxx| 亚洲一区二区三区视频| 久久精品国产2020观看福利| 国产精品中文字幕在线观看| 日韩经典中文字幕在线观看| 日韩欧美亚洲综合| 青青久久av北条麻妃海外网| 日韩久久精品电影| 中文字幕久精品免费视频| 日韩在线观看av| 日韩中文字幕视频| 国产不卡一区二区在线播放| 欧美激情久久久久久| 色多多国产成人永久免费网站| 色综合天天综合网国产成人网| 欧美成人全部免费| 欧美电影免费看| 91在线观看免费网站| 精品自拍视频在线观看|