STL學習 8 sort排序

2021-09-23 10:08:23 字數 1286 閱讀 7080

stl學習**:

在很多應用中,排序都是至關重要的,而且很多 stl 演算法也只適用於有序物件序列。定義在 algorithm 標頭檔案中的函式模板 sort() 缺省會將元素段排成公升序,這也就意味著排序的物件的型別需要支援<運算子。 

物件也必須是可交換的,這說明可以用定義在 utility 標頭檔案中的函式模板 swap() 來對兩個物件進行交換。這進一步表明這種物件的型別需要實現移動建構函式和移動賦值運算子。

函式模板 sort() 的型別引數 iter 是元素段元素對應的迭代器型別,而且它們必須支援隨機訪問迭代器。這表明 sort() 演算法只能對提供隨機訪問迭代器的容器中的元素進行排序,也說明 sort() 只能接受 array、vector、deque 或標準陣列中的元素。可以回顧前面章節,list 和 forward_list 容器都有成員函式 sort(); 這些用來排序的特殊成員函式是必要的,因為 list 只提供雙向迭代器,且 forward_list 只提供正向迭代器。

有多種方式:

方式1:繼承容器,然後過載operator《用於排序時的比較(寫在函式體內)

bool operator< (const person& rt)  

// 排序函式寫法,預設呼叫operator<  

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

方式2:寫比較函式(這種最方便)

bool compage(const person& pl, const person& pr)  

// 排序時傳入比較函式指標  

sort(members.begin(), members.end(), compage);

方式3:仿函式

struct compname  

};  

// 排序時傳入函式物件  

sort(members.begin(), members.end(), compname());

方法4:用stl的模板  greater()

int a[5] = ;

vectorb(a, a+5);

sort(b.begin(), b.end(), greater());

for (auto i : b) cout<輸出:4 3 2 1 0

STL(排序演算法sort)

標頭檔案 include 1.對基本型別的陣列從小到大排序 sort 陣列名 n1,陣列名 n2 n1和n2都是int型別的表示式,可以包含變數 如果n1 0,則 n1可以不寫 將陣列中下標範圍為 n1,n2 的元素從小到大排序 如 int a sort a,a 7 對整個陣列從小到大排序 int ...

STL排序演算法sort

要使用stl中的演算法,需要在程式標頭檔案引入 include 1.對基本型別的陣列從小到大排序 sort 陣列名 n1,陣列名 n2 n1和n2都是int型別的表示式,可以包含變數 如果n1 0,則 n1可以不寫 將陣列中下標範圍為 n1,n2 的元素從小到大排序。下標為n2的元素不在排序區間內 ...

STL排序演算法sort

sort 陣列名 n1,陣列名 n2 注意排序區間是 n1,n2 左閉右開。預設為從小到大排序,如果想要從大到小排序,需要加引數sort 陣列名 n1,陣列名 n2,greater include includeusing namespace std int main sort a,a 5 for ...