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

詳解C++ sort函數(shù)的cmp參數(shù)

 更新時(shí)間:2021年09月08日 10:20:09   作者:異想之旅  
這篇文章主要介紹了C++ sort函數(shù)的cmp參數(shù),以升降排序個(gè)結(jié)構(gòu)體的排序展開(kāi)的話題,感興趣的小伙伴可以參考下面文章內(nèi)容

前言:

學(xué)算法的第一天你在學(xué)冒泡、桶排

在你還沒(méi)搞明白快排和歸并的時(shí)候

你已經(jīng)學(xué)到了數(shù)據(jù)結(jié)構(gòu)最后的堆排序和希爾排序

可以說(shuō)排序是很多競(jìng)賽生的噩夢(mèng)……

于是它誕生了

void std::sort()

Sort the elements of a sequence using a predicate for comparison.

參數(shù):
__first – An iterator.
__last – Another iterator.
__comp – A comparison functor.

針對(duì)一個(gè)地址區(qū)間完成排序,算法每次自動(dòng)選擇,以快排為主

C++需要頭文件#include <algorithm> (當(dāng)然萬(wàn)能頭我也沒(méi)意見(jiàn))

1、升序排序

最簡(jiǎn)單的就是用它完成int類(lèi)型升序排序

Copy Line-numbers language-cpp
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int a[5] = {2, 1, 3, 5, 4};
    sort(a, a + 5);
    for (int i = 0; i < 5; i++) cout << a[i] << " ";
}


輸出如下,很簡(jiǎn)單

1 2 3 4 5

這里傳入給sort的參數(shù) a a + 5 都是地址,和大多數(shù)編程語(yǔ)言一樣,這里遵循左閉右開(kāi)原則,即函數(shù)實(shí)際會(huì)讀取和操作的五個(gè)地址如下:

a + 0
a + 1
a + 2
a + 3
a + 4

2、降序排序

如果需要降序排序,程序如下

#include <iostream>
#include <algorithm>
using namespace std;

bool cmp(int x, int y){
    return x > y;
}

int main() {
    int a[5] = {2, 1, 3, 5, 4};
    sort(a, a + 5, cmp);
    for (int i = 0; i < 5; i++) cout << a[i] << " ";
}

輸出:

5 4 3 2 1

我們多寫(xiě)了一個(gè)bool類(lèi)型的cmp函數(shù),并將其地址作為第3個(gè)參數(shù)傳給了sort

cmp可以替換其內(nèi)置的函數(shù)來(lái)判斷究竟該讓哪些元素在前哪些元素在后

很多小伙伴可能有個(gè)疑惑:如何從實(shí)質(zhì)上理解cmp函數(shù),或者說(shuō)我究竟該怎么記住cmp怎么寫(xiě)呢?

我們來(lái)看這三個(gè)點(diǎn):

  • 毋庸置疑,cmp函數(shù)返回bool類(lèi)型,表示當(dāng)前排序是否正確(具體見(jiàn)3)
  • cmp函數(shù)應(yīng)接受兩個(gè)參數(shù),類(lèi)型與要排序的數(shù)組相同(可以是int、short和long long這些常見(jiàn)類(lèi)型,當(dāng)然也可以是結(jié)構(gòu)體)
  • cmp返回值的實(shí)際意義是傳入a、b兩個(gè)參數(shù),a在前b在后的排序是否是正確的,若是正確的返回1(true),否則返回0(false)

那么我們?cè)倏匆粋€(gè)結(jié)構(gòu)體的排序?qū)嵗?/p>

3、結(jié)構(gòu)體的排序?qū)嵗?/h2>

結(jié)構(gòu)體的排序?qū)嵗狠斎?0個(gè)學(xué)生的名字和成績(jī),按照成績(jī)從高到低排序后輸出

輸入數(shù)據(jù):

Yixiangzhilv 90
Mydr 60
Xiaoming 10
Mr.Glass 60
GZN 80
Wangzi 85
Hyx 100
Wyx 99
Xth 0
Zz 75

程序?qū)崿F(xiàn)如下:

#include <algorithm>
#include <iostream>
using namespace std;

struct node {
    string name;
    int score;
};

bool cmp(struct node x, struct node y) {
    return x.score > y.score;
}

int main() {
    struct node a[10];
    for (int i = 0; i < 10; i++) cin >> a[i].name >> a[i].score;
    sort(a, a + 10, cmp);
    for (int i = 0; i < 10; i++) cout << a[i].name << " " << a[i].score << endl;
}

(此處還有一個(gè)C++知識(shí):如果已經(jīng)定義結(jié)構(gòu)體node,那么 struct node a[10]; 和 node a[10]; 都是合法的)

以上就是詳解C++ sort函數(shù)的cmp參數(shù)的詳細(xì)內(nèi)容,更多關(guān)于C++ sort函數(shù)的cmp參數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章,希望大家以后多多支持腳本之家

相關(guān)文章

  • C語(yǔ)言計(jì)算Robots機(jī)器人行走路線

    C語(yǔ)言計(jì)算Robots機(jī)器人行走路線

    這篇文章介紹了C語(yǔ)言計(jì)算Robots機(jī)器人行走路線,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Qt實(shí)現(xiàn)驗(yàn)證碼相關(guān)功能的代碼示例

    Qt實(shí)現(xiàn)驗(yàn)證碼相關(guān)功能的代碼示例

    驗(yàn)證碼的原理基于人類(lèi)視覺(jué)和計(jì)算機(jī)視覺(jué)的差異性,通過(guò)給用戶顯示一些難以被機(jī)器識(shí)別的圖形或文字,讓用戶進(jìn)行人機(jī)交互,確認(rèn)自己的身份,這樣可以有效保護(hù)網(wǎng)站安全,所以本給大家介紹了Qt實(shí)現(xiàn)驗(yàn)證碼相關(guān)功能的代碼示例,感興趣的朋友可以參考下
    2024-01-01
  • C語(yǔ)言實(shí)現(xiàn)二叉樹(shù)的示例詳解

    C語(yǔ)言實(shí)現(xiàn)二叉樹(shù)的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言中二叉樹(shù)的算法實(shí)現(xiàn)以及二叉樹(shù)的遍歷算法與應(yīng)用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-06-06
  • C++設(shè)計(jì)模式之抽象工廠模式

    C++設(shè)計(jì)模式之抽象工廠模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之抽象工廠模式,本文要講的抽象工廠模式,就是工廠方法模式的擴(kuò)展和延伸,需要的朋友可以參考下
    2014-09-09
  • 詳解Linux的SOCKET編程

    詳解Linux的SOCKET編程

    這篇文章主要介紹了Linux的SOCKET編程,并且進(jìn)行了實(shí)例講解,需要的朋友可以參考下
    2015-08-08
  • C++面試八股文之static_cast你了解嗎

    C++面試八股文之static_cast你了解嗎

    C++11引入四種新的類(lèi)型轉(zhuǎn)換,分別是static_cast、dynamic_cast、const_cast、和reinterpret_cast,下面就來(lái)和大家講講static_cast中面試??嫉闹R(shí)點(diǎn)吧
    2023-06-06
  • C/C++讀寫(xiě)文本文件、二進(jìn)制文件的方法

    C/C++讀寫(xiě)文本文件、二進(jìn)制文件的方法

    今天小編就為大家分享一篇C/C++讀寫(xiě)文本文件、二進(jìn)制文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Java?C++?算法題解leetcode652尋找重復(fù)子樹(shù)

    Java?C++?算法題解leetcode652尋找重復(fù)子樹(shù)

    這篇文章主要為大家介紹了Java?C++?算法題解leetcode652尋找重復(fù)子樹(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • C++模擬實(shí)現(xiàn)string的詳細(xì)過(guò)程

    C++模擬實(shí)現(xiàn)string的詳細(xì)過(guò)程

    在?C++?編程中,字符串的處理是一項(xiàng)常見(jiàn)且重要的任務(wù),標(biāo)準(zhǔn)庫(kù)中的?string?類(lèi)為我們提供了便捷、高效的字符串操作方法,模擬實(shí)現(xiàn)?string?類(lèi)?的背景源于對(duì)?C++?底層原理的探索欲望,所以本文給大家介紹了C++模擬實(shí)現(xiàn)string的詳細(xì)過(guò)程,需要的朋友可以參考下
    2024-08-08
  • 用C語(yǔ)言模仿Python函數(shù)的實(shí)例

    用C語(yǔ)言模仿Python函數(shù)的實(shí)例

    下面小編就為大家?guī)?lái)一篇用C語(yǔ)言模仿Python函數(shù)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05

最新評(píng)論