本⽂主要解决以下问题
STL中sort的使⽤⽅法使⽤sort对vector的排序使⽤sort对map排序使⽤sort对list排序
STL中sort的使⽤⽅法
C++ STL 标准库中的 sort() 函数,本质就是⼀个模板函数。该函数专门⽤来对容器或普通数组中指定范围内的元素进⾏排序,排序规则默认以元素值的⼤⼩做升序排序,除此之外我们也可以选择标准库提供的其它排序规则(⽐如std::greater降序排序规则),甚⾄还可以⾃定义排序规则。
值得⼀提的是,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),也可以是⾃定义的排序规则。数组排序样例: #include int main(){ int arr[] = {2,6,3,5,4,8,1,0,9,10}; sort(arr, arr+10); for(int i = 0;i < 10;i++) cout << arr[i] << \" \";}// out/* 0 1 2 3 4 5 6 8 9 10*/ 使⽤ STL 标准库提供的排序规则 int main(){ int arr[] = {2,6,3,5,4,8,1,0,9,10}; sort(arr, arr+10, std::greater sort(arr, arr+10, std::less 10 9 8 6 5 4 3 2 1 00 1 2 3 4 5 6 8 9 10*/ 使⽤⾃定义⽐较器 bool cmp(const int a, const int b){ return a < b;} int main(){ int arr[] = {2,6,3,5,4,8,1,0,9,10}; sort(arr, arr+10, cmp); for(int i = 0;i < 10;i++) cout << arr[i] << \" \";}// out/* 0 1 2 3 4 5 6 8 9 10*/ 使⽤ lambda 表达式⾃定义⽐较器 int main(){ int arr[] = {2,6,3,5,4,8,1,0,9,10}; sort(arr, arr+10, [](const int a, const int b){ return a < b; }); for(int i = 0;i < 10;i++) cout << arr[i] << \" \";}// out/* 0 1 2 3 4 5 6 8 9 10*/ 使⽤sort对vector的排序 在 C++ 中⼏乎操作vector时,⼏乎可以视作是在操作数组,可以将vector看作对数组的封装。因此,使⽤sort对vector进⾏排序时完全可以遵循上⾯使⽤sort对数组的排序⽅法。⼀维vector排序 int main(){ vector cout << item << \" \"; return 0;}// out/* 0 1 2 3 4 5 6 8 9 10*/ ⼆维vector排序。数组保存⼀系列的坐标,先按照第⼆维进⾏升序排列,再按照第⼀维升序排列 int main(){ vector sort(vvi.begin(), vvi.end(), [](const vector else if(v1[1] == v2[1]) return v1[0] < v2[0]; else return false; }); for(vector cout << item << \" \"; } cout << endl; } return 0;}// out/*9 15 26 22 38 7*/ 使⽤sort对map排序 map是⽤来存放 #include