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() 函式位於標頭檔案中,因此在使用該函式前,程式中應包含如下語句:
#includesort() 函式有 2 種用法,其語法格式分別為:
//其中,first 和 last 都為隨機訪問迭代器,它們的組合 [first, last) 用來指定要排序的目標區域;另外在第 2 種格式中,comp 可以是 c++ stl 標準庫提供的排序規則(比如 std::greater),也可以是自定義的排序規則。對 [first, last) 區域內的元素做預設的公升序排序
void
sort (randomaccessiterator first, randomaccessiterator last);
//按照指定的 comp 排序規則,對 [first, last) 區域內的元素進行排序
void sort (randomaccessiterator first, randomaccessiterator last, compare comp);
關於如何自定義乙個排序規則,除了《c++ stl關聯式容器自定義排序規則》一節介紹的 2 種方式外,還可以直接定義乙個具有 2 個引數並返回 bool 型別值的函式作為排序規則。
#include#includeusing
namespace
std;
main()
; sort(a,a+10
);
for(int i=0;i<10;i++)
cout
}
#include#include4.對於容器,容器中的資料型別可以多樣化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)
1) 元素自身包含了比較關係,如int,double等基礎型別,可以直接進行比較greater() 遞減, less() 遞增(省略)
關鍵**:
sort(arr.begin(),arr.end(),greater());2)元素本身為class或者struct,類內部需要過載< 運算子,實現元素的比較;
注意事項:bool operator
1 #include2 #include3 #include"vector"**於:c++中sort函式使用方法 - 俊寶貝 - (cnblogs.com)4 using namespace std;
5 typedef struct student
12 }student;
13 main()
5 };
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 ...