從最簡單的vector中sort用法到自定義比較函數comp後對結構體排序的sort算法

sort函數在使用中很是好用,也很是簡單,並且效率與冒泡或者選擇排序不是一個數量級。本文就sort函數在vector中的用法分爲sort函數入門用法與自定義comp比較函數比較結構體這兩個最基本的功能講講其用法:ios

一、sort入門:函數

使用sort須要包含algorithm頭文件,完整代碼以下spa

#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;
}

運行結果以下:code

3
13
23
113
233
請按任意鍵繼續. . .對象

能夠看到結果是從小到大排序,但若是我須要從大到小排序呢?blog

二、改寫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;
}

運行結果:it

233
113
23
13
3
請按任意鍵繼續. . .io

爲何會這樣呢?比較時sort函數根據comp函數進行判斷輸的大小,系統默認a<b時返回真,因而從小到大排,而個人comp函數設定爲a>b時返回爲真,那麼最終獲得的排序結果也相應的從小到大變成從大到小。簡單吧~~

三、對結構體排序

有了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 2132 2313 2234 235 123請按任意鍵繼續. . .

相關文章
相關標籤/搜索