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

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

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

前言:

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

在你還沒搞明白快排和歸并的時候

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

可以說排序是很多競賽生的噩夢……

于是它誕生了

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.

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

C++需要頭文件#include <algorithm> (當(dāng)然萬能頭我也沒意見)

1、升序排序

最簡單的就是用它完成int類型升序排序

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] << " ";
}


輸出如下,很簡單

1 2 3 4 5

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

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

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

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

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

我們來看這三個點(diǎn):

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

那么我們再看一個結(jié)構(gòu)體的排序?qū)嵗?/p>

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

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

輸入數(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;
}

(此處還有一個C++知識:如果已經(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ù)的資料請關(guān)注腳本之家其它相關(guān)文章,希望大家以后多多支持腳本之家

相關(guān)文章

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

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

    這篇文章介紹了C語言計算Robots機(jī)器人行走路線,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(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)證碼的原理基于人類視覺和計算機(jī)視覺的差異性,通過給用戶顯示一些難以被機(jī)器識別的圖形或文字,讓用戶進(jìn)行人機(jī)交互,確認(rèn)自己的身份,這樣可以有效保護(hù)網(wǎng)站安全,所以本給大家介紹了Qt實(shí)現(xiàn)驗(yàn)證碼相關(guān)功能的代碼示例,感興趣的朋友可以參考下
    2024-01-01
  • C語言實(shí)現(xiàn)二叉樹的示例詳解

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

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

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

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

    詳解Linux的SOCKET編程

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

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

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

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

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

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

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

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

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

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

    下面小編就為大家?guī)硪黄肅語言模仿Python函數(shù)的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論