最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

 #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);     //對整個b排序
 
     sort(v1.begin(),v1.end());//輸入兩個迭代器從而排序一個范圍
 
     sort(v2.begin(),v2.end());
 
     return 0;
 }

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

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

     sort(a+1,a+9);    //可以指定任意合法的排序區(qū)間,不能越界
     reverse(a+1,a+9);
      sort(b,b+8);     //對整個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++標準庫來實現(xiàn)降序(或升序)。此時要包含頭文件<functional>,<functional>頭文件提供了一些基于模板的比較函數(shù)對象,這里在排序的時候只用到了 greater<type>() 和 less<type>() 兩個;讓 greater<type>() 或 less<type>() 做sort()函數(shù)的第三個參數(shù)來實現(xiàn)升序或降序排列;其中g(shù)reater<type>() 用于降序排列,less<type>() 用于升序排列

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

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

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

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

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

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

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

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

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

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

//排序,方法使用lambda表達式
		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表達式詳見http://m.fzitv.net/article/105626.htm

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

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

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

相關(guān)文章

  • wxWidgets自定義按鈕的方法

    wxWidgets自定義按鈕的方法

    這篇文章主要為大家詳細介紹了wxWidgets自定義按鈕的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C++實現(xiàn)并優(yōu)化異常系統(tǒng)

    C++實現(xiàn)并優(yōu)化異常系統(tǒng)

    異常處理是C++的一項語言機制,用于在程序中處理異常事件,下面這篇文章主要給大家介紹了關(guān)于C++中異常的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • C++中delete和delete[]的區(qū)別

    C++中delete和delete[]的區(qū)別

    這篇文章主要介紹了C++中delete和delete[]的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • C++獲取zip文件列表方法

    C++獲取zip文件列表方法

    本文將介紹獲取zip文件列表的方法,有些新手的朋友可以參考下
    2012-12-12
  • C++如何實現(xiàn)BCD碼和ASCII碼的相互轉(zhuǎn)換

    C++如何實現(xiàn)BCD碼和ASCII碼的相互轉(zhuǎn)換

    這篇文章主要介紹了C++實現(xiàn)BCD碼和ASCII碼互轉(zhuǎn),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • c語言鏈表操作示例分享

    c語言鏈表操作示例分享

    這篇文章主要介紹了c語言鏈表操作示例,代碼中有注釋,需要的朋友可以參考下
    2014-03-03
  • C++實現(xiàn)多線程并發(fā)場景下的同步方法

    C++實現(xiàn)多線程并發(fā)場景下的同步方法

    在C++中實現(xiàn)多線程并發(fā)場景下的同步方法,包括使用互斥鎖、獨占鎖、共享鎖和原子操作的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • 一篇文章帶你了解C++中的異常

    一篇文章帶你了解C++中的異常

    這篇文章主要為大家詳細介紹了C++中的異常,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 使用UDP協(xié)議實現(xiàn)單詞翻譯服務(wù)器

    使用UDP協(xié)議實現(xiàn)單詞翻譯服務(wù)器

    這篇文章主要為大家詳細介紹了如何使用UDP協(xié)議實現(xiàn)英文單詞翻譯服務(wù)器,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解下
    2023-08-08
  • C++ 實現(xiàn)的通訊錄管理系統(tǒng)詳解

    C++ 實現(xiàn)的通訊錄管理系統(tǒng)詳解

    這篇文章主要為大家詳細介紹了C++實現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論

诸城市| 荥阳市| 左云县| 繁昌县| 简阳市| 高要市| 府谷县| 黄龙县| 永寿县| 娱乐| 久治县| 西丰县| 龙胜| 黑龙江省| 东光县| 蕉岭县| 西昌市| 泽库县| 合阳县| 象山县| 北京市| 遵义市| 酉阳| 扎兰屯市| 攀枝花市| 通道| 汤原县| 漠河县| 潍坊市| 丁青县| 财经| 冀州市| 奉新县| 新晃| 阳新县| 沁水县| 铜梁县| 洪泽县| 汉寿县| 尖扎县| 颍上县|