欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于C++中sort()函數(shù)的用法,你搞明白了沒(méi)

 更新時(shí)間:2023年03月09日 09:00:04   作者:機(jī)巧的胖子  
這篇文章主要介紹了關(guān)于C++中sort()函數(shù)的用法,并通過(guò)三種方法介紹了按降序排列的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

sort(v.begin(),v.end(),cmp),它是用來(lái)對(duì)一組序列進(jìn)行排序的。sort函數(shù)進(jìn)行排序的時(shí)間復(fù)雜度為n*log2n,比冒泡之類的排序算法效率要高,包含在頭文件為#include<algorithm>的c++標(biāo)準(zhǔn)庫(kù)中。

        其有三個(gè)參數(shù),前兩個(gè)參數(shù)是待排序區(qū)間;第三個(gè)參數(shù)可有可無(wú)(第三個(gè)參數(shù)代表比較規(guī)則),沒(méi)有第三個(gè)參數(shù)的時(shí)候,sort()默認(rèn)按升序排列,有第三個(gè)參數(shù)的時(shí)候,可以通過(guò)這個(gè)參數(shù)實(shí)現(xiàn)各種各樣的排序,包括降序。sort()函數(shù)功能強(qiáng)大就是強(qiáng)大在第三個(gè)參數(shù)。

        sort()函數(shù)除了可以對(duì)int型、char型、double型、字符串排序外,還可以實(shí)現(xiàn)對(duì)結(jié)構(gòu)體、鏈表、pair、vector、等類型進(jìn)行排序,但需要自己寫比較函數(shù)。而且sort()既可以對(duì)數(shù)組排序,也可以對(duì)vector容器排序。下面就先說(shuō)一下sort()只有兩個(gè)參數(shù)時(shí)的用法,具體代碼見(jiàn)下:

 #include<iostream>
  #include<vector>
  #include<string>
  #include<algorithm>
  using namespace std;
  int main()
  {
      int a[10]={6,5,4,8,3,9,7,10,1,2};
      char b[8]={'h','z','l','n','m','r','d','g'};
     vector<double> v1;
     vector<string> v2;
    
     sort(a+1,a+9);    //可以指定任意合法的排序區(qū)間,不能越界
 
     sort(b,b+8);     //對(duì)整個(gè)b排序
 
     sort(v1.begin(),v1.end());//輸入兩個(gè)迭代器從而排序一個(gè)范圍
 
     sort(v2.begin(),v2.end());
 
     return 0;
 }

上面幾種方法都是升序排列,要想按降序排列,有3種方法可以實(shí)現(xiàn):

1. sort()函數(shù)只有兩個(gè)參數(shù)時(shí)默認(rèn)升序排列,在排完序后,再用reverse()函數(shù)把整個(gè)序列給翻轉(zhuǎn)一下,這樣序列就變成了降序。

     sort(a+1,a+9);    //可以指定任意合法的排序區(qū)間,不能越界
     reverse(a+1,a+9);
      sort(b,b+8);     //對(duì)整個(gè)b排序
     reverse(b,b+8);
     sort(v1.begin(),v1.end());
     reverse(v1.begin(),v1.end());
     sort(v2.begin(),v2.end());
     reverse(v2.begin(),v2.end());

2. 借助c++標(biāo)準(zhǔn)庫(kù)來(lái)實(shí)現(xiàn)降序(或升序)。此時(shí)要包含頭文件<functional>,<functional>頭文件提供了一些基于模板的比較函數(shù)對(duì)象,這里在排序的時(shí)候只用到了 greater<type>() 和 less<type>() 兩個(gè);讓 greater<type>() 或 less<type>() 做sort()函數(shù)的第三個(gè)參數(shù)來(lái)實(shí)現(xiàn)升序或降序排列;其中g(shù)reater<type>() 用于降序排列,less<type>() 用于升序排列

     sort(a,a+10,greater<int>());//降序排列
    sort(a,a+10,less<int>());//升序排列

3. 第三個(gè)方法是自己寫一個(gè)比較函數(shù)來(lái)實(shí)現(xiàn)升序或降序排列,并讓這個(gè)比較函數(shù)做sort()函數(shù)的第三個(gè)參數(shù);比較函數(shù)不僅能實(shí)現(xiàn)升序降序排列,還能實(shí)現(xiàn)其他的功能。

這就是sort()函數(shù)功能強(qiáng)大的地方,它可以擴(kuò)展,而擴(kuò)展的關(guān)鍵就是第三個(gè)參數(shù)。

    先說(shuō)一下比較函數(shù),當(dāng)你想實(shí)現(xiàn)特定比較方式的時(shí)候,就要自己定義一個(gè)返回bool值的比較函數(shù)了;這時(shí)sort()函數(shù)的第三個(gè)參數(shù)就是一個(gè)函數(shù),如果它返回假值就交換操作對(duì)象的位置,返回真值的話操作對(duì)象位置不變。下面就用比較函數(shù)來(lái)實(shí)現(xiàn)升序降序的排列:

首先實(shí)現(xiàn)比較函數(shù),注意比較函數(shù)參數(shù)數(shù)據(jù)類型要與需要比較的對(duì)象一致:

  bool cmp1(int a,int b)  //按降序排列
  {
      return a>b;
  }
  
 bool cmp2(int a,int b)  //按升序排列
 {
     return a<b;
 }

然后調(diào)用sort函數(shù)即可,此時(shí)不需要給比較函數(shù)傳入?yún)?shù),比較函數(shù)只是確定比較的規(guī)則。

     sort(v.begin(),v.end(),cmp1);   //這里不需要對(duì)比較函數(shù)cmp1傳入?yún)?shù)
 
     sort(v.begin(),v.end(),cmp2);   不需要對(duì)比較函數(shù)cmp2傳入?yún)?shù)

 另外比較函數(shù)可以用lambda表達(dá)式來(lái)寫,這是leetcode  hot100的一道題:

首先需要對(duì)people的vector按照hi進(jìn)行從小到大的升序排列,對(duì)于相同的hi再按照ki進(jìn)行從大到小的降序排序,我們使用sort中第三個(gè)參數(shù)的強(qiáng)大功能,就能夠自己定義比較規(guī)則,一條語(yǔ)句就能實(shí)現(xiàn)我們需要的排序。代碼如下:

//排序,方法使用lambda表達(dá)式
		sort(people.begin(), people.end(), [](vector<int>& a, vector<int>& b) -> bool {return (a[0] < b[0]) || ((a[0] == b[0]) && (a[1] > b[1])); });

lambda表達(dá)式詳見(jiàn)http://www.dbjr.com.cn/article/105626.htm

可以定義創(chuàng)建匿名函數(shù)對(duì)象,從而簡(jiǎn)化編程工作。

這就是sort函數(shù)的強(qiáng)大之處,在我們平時(shí)的編程當(dāng)中也會(huì)經(jīng)常使用到。

到此這篇關(guān)于關(guān)于C++中sort()函數(shù)的用法,你搞明白了沒(méi)的文章就介紹到這了,更多相關(guān)sort()函數(shù)的用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言volatile關(guān)鍵字的作用與示例

    C語(yǔ)言volatile關(guān)鍵字的作用與示例

    這篇文章主要介紹了C語(yǔ)言volatile關(guān)鍵字的作用,volatile提醒編譯器它后面所定義的變量隨時(shí)都有可能改變,因此編譯后的程序每次需要存儲(chǔ)或讀取這個(gè)變量的時(shí)候,都會(huì)直接從變量地址中讀取數(shù)據(jù)
    2023-04-04
  • C語(yǔ)言實(shí)現(xiàn)解析csv格式文件的示例代碼

    C語(yǔ)言實(shí)現(xiàn)解析csv格式文件的示例代碼

    CSV,有時(shí)也稱為字符分隔值,其文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本),本文為大家整理了C語(yǔ)言解析csv文件的方法,需要的可以參考一下
    2023-06-06
  • c++讀取數(shù)據(jù)文件到數(shù)組的實(shí)例

    c++讀取數(shù)據(jù)文件到數(shù)組的實(shí)例

    今天小編就為大家分享一篇c++讀取數(shù)據(jù)文件到數(shù)組的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • C++ OpenCV實(shí)現(xiàn)灰度圖蒙版GrayMask的示例代碼

    C++ OpenCV實(shí)現(xiàn)灰度圖蒙版GrayMask的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C++和OpenCV實(shí)現(xiàn)灰度圖蒙版GrayMask,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定參考價(jià)值,需要的可以參考一下
    2022-05-05
  • linux 匿名管道實(shí)例詳解

    linux 匿名管道實(shí)例詳解

    這篇文章主要介紹了linux 匿名管道實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 深入了解c++數(shù)組與指針

    深入了解c++數(shù)組與指針

    這篇文章主要介紹了c++數(shù)組與指針的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C++中的覆蓋和隱藏詳解

    C++中的覆蓋和隱藏詳解

    這篇文章主要介紹了C++中重載、重寫(覆蓋)和隱藏的區(qū)別,是C++面向?qū)ο蟪绦蛟O(shè)計(jì)非常重要的概念,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-08-08
  • C語(yǔ)言中的strncpy()函數(shù)的用法及應(yīng)用場(chǎng)景詳解

    C語(yǔ)言中的strncpy()函數(shù)的用法及應(yīng)用場(chǎng)景詳解

    在C語(yǔ)言編程中,strncpy函數(shù)用于安全地復(fù)制字符串,它可以指定復(fù)制的字符數(shù)以防止緩沖區(qū)溢出,這篇文章主要介紹了C語(yǔ)言中的strncpy()函數(shù)的用法及應(yīng)用場(chǎng)景的相關(guān)資料,并提供了示例代碼,需要的朋友可以參考下
    2024-10-10
  • C++實(shí)現(xiàn)鏈表版本通訊錄

    C++實(shí)現(xiàn)鏈表版本通訊錄

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)鏈表版本通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++中友元函數(shù)(friend)解析

    C++中友元函數(shù)(friend)解析

    這篇文章主要分享了C++友元函數(shù)講解,C++提供了一種形式的訪問(wèn)權(quán)限,叫做友元,友元有三種,分別是友元函數(shù)、友元類和友元成員函數(shù),下面將詳細(xì)介紹該內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01

最新評(píng)論