sort函數在使用中非常好用,也非常簡單,而且效率與冒泡或者選擇排序不是一個數量級。本文就sort函數在vector中的用法分為sort函數入門用法與自定義comp比較函數比較結構體這兩個最基本的功能講講其用法:
1、sort入門:
使用sort需要包含algorithm頭文件,完整代碼如下
#include<iostream> #include<vector> #include<algorithm>//貌似可以不用,但最好加上。 using namespace std; int main() { vector<int>v; v.push_back(13); v.push_back(23); v.push_back(03); v.push_back(233); v.push_back(113); sort(v.begin(),v.end()); int i=0; for(i=0;i<5;i++) { cout<<v[i]<<endl; } system("pause"); return 0; }
運行結果如下:
3
13
23
113
233
請按任意鍵繼續. . .
可以看到結果是從小到大排序,但如果我需要從大到小排序呢?
2、改寫comp從大到小排序。
加入comp函數后代碼如下:
#include<iostream> #include<vector> #include<algorithm> using namespace std; bool comp(const int &a,const int &b) { return a>b; } int main() { vector<int>v; v.push_back(13); v.push_back(23); v.push_back(03); v.push_back(233); v.push_back(113); sort(v.begin(),v.end(),comp); int i=0; for(i=0;i<5;i++) { cout<<v[i]<<endl; } system("pause"); return 0; }
運行結果:
233
113
23
13
3
請按任意鍵繼續. . .
為什么會這樣呢?比較時sort函數根據comp函數進行判斷輸的大小,系統默認a<b時返回真,於是從小到大排,而我的comp函數設定為a>b時返回為真,那么最終得到的排序結果也相應的從小到大變成從大到小。簡單吧~~
3、對結構體排序
有了comp函數我們就可以實現對任意結構體任意對象進行排序,只需要對應修改comp函數即可實現。代碼如下:
#include<iostream> #include<vector> #include<algorithm> using namespace std; struct ss { int a,b; }; bool comp(const ss &a,const ss &b) { return a.a<b.a; } int main() { vector<ss>v; ss s1,s2,s3,s4,s5; s1.a=4;s1.b=23; s2.a=1;s2.b=213; s3.a=2;s3.b=231; s4.a=5;s4.b=123; s5.a=3;s5.b=223; v.push_back(s1); v.push_back(s2); v.push_back(s3); v.push_back(s4); v.push_back(s5); sort(v.begin(),v.end(),comp); int i=0; for(i=0;i<5;i++) { cout<<v[i].a<<" "<<v[i].b<<endl; } system("pause"); return 0; }
比如ss結構體中a代表的是索引號,b代表的是索引對應的值,那么我想按索引排序,通過改寫comp函數即可實現。
結果:
1 213
2 231
3 223
4 23
5 123
請按任意鍵繼續. . .