STL sort函式的用法

2021-08-04 13:24:47 字數 1200 閱讀 9155

sort在stl庫中是排序函式,有時冒泡、選擇等o(n^2)演算法會超時時,我們可以使用stl中的快速排序o(n log n)完成排序

sort在庫裡面,原型如下:

template void sort ( randomaccessiterator first, randomaccessiterator last );

template void sort ( randomaccessiterator first, randomaccessiterator last, compare comp );

他有兩種形式乙個有三個引數,乙個有兩個引數,我們先講講兩個引數的吧!

sort的前兩個引數是起始位址和中止位址

如:sort(a,a+n) 表示對a[0] a[1] a[2] ... a[n-1] 排序

**如下:

#include #include using namespace std;

int main()

這樣是預設公升序的,那如果是降序呢?

這樣,我們就要用到第三個引數,第三個引數是乙個比較函式

bool cmp(int a,int b)
這個就是降序排序的比較函式,意思:

是a > b時為true,就不交換,a < b時為false,交換

然後我們呼叫sort(a+1,a+n+1,cmp);就可以對a[1] a[2] a[3] ... a[n] 進行排序了

sort也能對結構體排序,如:

#include #include using namespace std;

struct node p[1001];

int n;

int cmp(node a,node b)

int main()

以上**的意思是,如果a.x不等於b.x,就按x從小到大排;如果x相等按y從小到大排

結構體還可以過載運算子,使sort只用兩個引數就可以按自己的規則排序,如:

#include #include using namespace std;

struct node

}p[1001];

int n;

//int cmp(node a,node b)

int main()

STL sort函式的內部實現

1 在stl提供的各式各樣的演算法中,sort 是最複雜最龐大的乙個。這個演算法只接受randomaccessiterators 隨機訪問迭代器 然後將區間內所有元素由小到大重新排列。第二個版本允許使用者自己指定乙個仿函式作為排序標準。2 對於關係型容器,底層自己採用有自動排序功能的rb tree,...

STL sort演算法中的比較函式

排序,既陌生又熟悉的名詞。排序,成為面試官中喜歡問的演算法問題。c stl中為我們提供了std sort,所以今天我們不是來描述各種排序演算法的實現,而是看看怎麼使用stl為我們提供的sort。先預熱,include include include int main person int age,s...

STL sort的危險之處

stl好用是好用,不慎的話相當危險,尤其是俺們這些伺服器程式.迭代器失效就不說了,發生了就是個當機回檔的事,慎之 最近工作中看到了stl sort排序導致的乙個core,問題的根源就是,stl sort要求被排序的物件必須是順序確定的,比如你在過載 操作符的時候 class test1 上面的 就是...