C 中sort排序函式的原理用法

2021-10-07 14:01:43 字數 1758 閱讀 9919

sort函式可以用來給指定區間內的資料按照某種規則排序,在這裡貼一下sort函式的**

templateinline

void sort(_ranit _first, _ranit _last, _pr _pred)

能夠看出該函式是經過多層呼叫的,再深層次就不貼了大家可以開啟**庫看。

使用時預設情況下是兩個引數,例如

vectortmp = ;

sort(tmp.begin(), tmp.end());

此情況下tmp內元素是按照公升序排列的,列印會輸出「1,2,3,4,5,6,7」。通過函式**能看出sort函式是有三個引數的,依次是此區間的起始位此區間的結束位的下乙個排序方式。如果想按照降序排列,就需要加入第三個引數。

函式第三個引數可以是乙個函式,返回bool型變數。

bool cmp2(const int n1, const int n2)
sort函式使用方法為:

vectortmp = ;

sort(tmp.begin(), tmp.end(), cmp2);

此情況下tmp內元素是按照降序排列的,列印會輸出「7,6,5,4,3,2,1」。

仿函式(函式物件)

第三個引數可以是乙個仿函式,由結構體實現,預設的有less()greater(),也可以自己實現。

templatestruct less

};

貼了一段庫裡面的less仿函式,就是在結構體或類中過載(),實現比較功能,和函式功能相似,也返回布林型變數,可塑性強,適用性廣。用法為:

vectortmp = ;

sort(tmp.begin(), tmp.end(), less());

lambda表示式

第三個引數也可以直接將lambda表示式形式直接寫入,用法為:

vectortmp = ;

sort(tmp.begin(), tmp.end(), (int n1, int n2) );

如果需要排序的是乙個pair或乙個類,sort函式預設從小到大,如果想使用其他排序方式,就需要重新定義排序函式,如果對類排序還需要在類中過載》、=、《符號!

vectorweight  = ;;//體重

vectorheight = //身高

vector> human;

for (int i = 0; i < 6; i++) ); }

sort(human.begin(), human.end(), cmp);

for (int i = 0; i < 6; i++) {

cout << "體重為:" << human[i].first << "kg, " <<"身高為:"<< human[i].second << "cm" 《輸出結果為:

體重為:75kg, 身高為:190cm

體重為:68kg, 身高為:110cm

體重為:65kg, 身高為:150cm

體重為:65kg, 身高為:100cm

體重為:60kg, 身高為:95cm

體重為:56kg, 身高為:90cm

我是沒訊號的法杖,發不出去訊號,也接收不到訊號。

C 中的sort 排序函式用法

原文章 中的sort 排序函式用法m p 10183210.html sort first pointer,first pointer n,cmp 該函式可以給陣列,或者鍊錶list 向量排序。實現原理 sort並不是簡單的快速排序,它對普通的快速排序進行了優化,此外,它還結合了插入排序和推排序。系...

C 中sort 排序函式的用法

sort first pointer,first pointer n,cmp 該函式可以給陣列,或者鍊錶list 向量排序。實現原理 sort並不是簡單的快速排序,它對普通的快速排序進行了優化,此外,它還結合了插入排序和推排序。系統會根據你的資料形式和資料量自動選擇合適的排序方法,這並不是說它每次排...

C 中的sort 排序函式用法

sort first pointer,first pointer n,cmp 該函式可以給陣列,或者鍊錶list 向量排序。實現原理 sort並不是簡單的快速排序,它對普通的快速排序進行了優化,此外,它還結合了插入排序和推排序。系統會根據你的資料形式和資料量自動選擇合適的排序方法,這並不是說它每次排...