sort 函式用法

2022-09-21 16:18:10 字數 2364 閱讀 6038

c++ stl 標準庫中的 sort()  函式,本質就是乙個模板函式。正如表 1 中描述的,該函式專門用來對容器或普通陣列中指定範圍內的元素進行排序,排序規則預設以元素值的大小做公升序排序,除此之外我們也可以選擇標準庫提供的其它排序規則(比如std::greater降序排序規則),甚至還可以自定義排序規則。

需要注意的是,sort() 函式受到底層實現方式的限制,它僅適用於普通陣列和部分型別的容器。換句話說,只有普通陣列和具備以下條件的容器,才能使用 sort() 函式:

容器支援的迭代器型別必須為隨機訪問迭代器。這意味著,sort() 只對 array、vector、deque 這 3 個容器提供支援。

如果對容器中指定區域的元素做預設公升序排序,則元素型別必須支援<小於運算子;同樣,如果選用標準庫提供的其它排序規則,元素型別也必須支援該規則底層實現所用的比較運算子;

sort() 函式在實現排序時,需要交換容器中元素的儲存位置。這種情況下,如果容器中儲存的是自定義的類物件,則該類的內部必須提供移動建構函式和移動賦值運算子。

2 1 2 3 2

可以看到,該組資料中包含多個值為 2 的元素,此時如果使用 sort() 函式進行排序,則值為 2 的這 3 個元素的相對位置可能會發生改變,比如排序結果為:

1 2 2 2 3

可以看到,原本紅色的元素 2 位於綠色 2 和橙色 2 的左側,但經過 sort() 函式排序之後,它們的相對位置發生了改變,即紅色 2 移動到了綠色 2 和橙色 2 的右側。

(實際場景中,如果需要保證值相等元素的相對位置不發生改變,可以選用 stable_sort() 排序函式

sort() 函式位於標頭檔案中,因此在使用該函式前,程式中應包含如下語句:

#include
sort() 函式有 2 種用法,其語法格式分別為:

//

對 [first, last) 區域內的元素做預設的公升序排序

void

sort (randomaccessiterator first, randomaccessiterator last);

//按照指定的 comp 排序規則,對 [first, last) 區域內的元素進行排序

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

其中,first 和 last 都為隨機訪問迭代器,它們的組合 [first, last) 用來指定要排序的目標區域;另外在第 2 種格式中,comp 可以是 c++ stl 標準庫提供的排序規則(比如 std::greater),也可以是自定義的排序規則。

關於如何自定義乙個排序規則,除了《c++ stl關聯式容器自定義排序規則》一節介紹的 2 種方式外,還可以直接定義乙個具有 2 個引數並返回 bool 型別值的函式作為排序規則。

#include#include

using

namespace

std;

main()

;  sort(a,a+10

);  

for(int i=0;i<10;i++)

cout

}

#include#include

using

namespace

std;

bool cmp(int a,int

b);main();

sort(a,a+10

,cmp);

for(int i=0;i<10;i++)

cout

}//自定義函式

bool cmp(int a,int

b)

4.對於容器,容器中的資料型別可以多樣化

1) 元素自身包含了比較關係,如int,double等基礎型別,可以直接進行比較greater() 遞減, less() 遞增(省略)

關鍵**:

sort(arr.begin(),arr.end(),greater());
2)元素本身為class或者struct,類內部需要過載< 運算子,實現元素的比較;

注意事項:bool operator

1 #include2 #include3 #include"vector"

4 using namespace std;

5 typedef struct student

12 }student;

13 main()

5 };

**於:c++中sort函式使用方法 - 俊寶貝 - (cnblogs.com)

c++ sort()排序函式用法詳解 (biancheng.net)

sort函式用法

sort函式的用法 做acm題的時候,排序是一種經常要用到的操作。如果每次都自己寫個冒泡之類的o n 2 排序,不但程式容易超時,而且浪費寶貴的比賽時間,還很有可能寫錯。stl裡面有個sort函式,可以直接對陣列排序,複雜度為n log2 n 使用這個函式,需要包含標頭檔案。這個函式可以傳兩個引數或...

sort函式用法

標頭檔案 include using namespace std 1.預設的sort函式是按公升序排序。sort a,a n 兩個引數分別為待排序陣列的首位址和尾位址 2.可以自己寫乙個cmp函式,按特定意圖進行排序。例如 1 對陣列a降序排序 int cmp const int a,const i...

Sort函式用法

sort函式為c 中中自帶的重要函式之一,作用是對陣列進行快速排序。用法如下 sort 起始位置,結束位置,判斷函式 一般來說,起始位置直接寫上要排序的陣列就行了,比如我們要排序的陣列是r,需要排序n個數,就寫成sort r,r n 可以不寫判斷函式,預設從小到大排序。需要注意的是sort預設從r ...