C 標準庫擴充套件,給結構排序

2021-06-13 18:37:30 字數 1199 閱讀 4366

c++標準庫的容器依賴less操作來比較元素的大小,比如std::sort可以傳入乙個pred,提供元素的less比較方法,缺省會使用std::less即呼叫元素的《操作符

對於自定義結構型別,可能需要根據乙個或者多個資料成員來比較其大小,比如如下人員資訊結構,需要結合三個字段進行排序,否則不能唯一確定大小:

struct person

;

為每個結構提供排序函式很繁瑣,也容易出錯,但可以使用模板來解決這一類問題,簡單有效!

首先我們把比較函式定義成函式物件,並在內部儲存參與比較的資料成員指標。對於使用單個資料成員來比較整個元素大小的函式物件,我們定義如下:

templatestruct singlecompare

//建構函式

singlecompare(tfield f) : f_(f){}

};

下面再定義乙個函式物件,用於在已有的大小比較函式物件上再增加乙個參與比較的資料成員:

templatestruct addcomparefield

//建構函式

addcomparefield(tfield f, tbasecompare b) : f_(f),b_(b){}

};

借助上面的addcomparefield類,我們就可以方便的擴充套件出對多個資料成員進行比較的函式物件:

templatestruct comp2 : addcomparefield>

};templatestruct co*** : addcomparefield>

};

。。。4個、5個比較成員的以此類推。

為了方便呼叫,繼續定義一組比較物件的構造器函式:

templatesinglecomparemake_less_compare(f1 f1)

templatecomp2make_less_compare(f1 f1, f2 f2)

templateco***make_less_compare(f1 f1, f2 f2, f3 f3)

這樣我們就可以對包含person的容器進行排序了,測試**如下:

int main()

C 標準庫 vector排序

前天要做乙個對c stl的vector容器做乙個排序操作,之前一直把vector當做乙個容量可自動變化的陣列,是的,陣列,所以打算按照對陣列進行排序的方法 用快速排序或是氣泡排序等演算法自己寫乙個排序的函式。後來覺得stl這麼強大,應該有它自己的排序方法 沒有好好學習啊 然後就去google了一下,...

C 標準庫排序方法大全

這個題目有點兒無聊,跟茴香豆的 茴 字有幾種寫法一樣無聊,又是乙個無聊的老掉牙的話題 排序,問題依然是無聊至極 把輸入的單詞按順序 我可沒說是什麼順序 排列。當作是乙個總結吧。按詞典排好說,如果你用vectorwords儲存單詞,只需用algorithm裡的sort即可 sort words.beg...

C 標準庫和C 標準模版庫

c 標準庫很大,在現在的情況下,c 標準庫確實越來越好,因為大的庫會包含大量的功能.標準庫中的功能越多,開發自己的應用程式時能借助的功能就越多,c 庫並非提供一切 很明顯的是沒有提供開發和圖形使用者介面的支援 但確實提供了很多.標準c 庫中主要有以下主要元件 標準c庫.i 0流技術.string.容...