亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

c++如何使用sort函數(shù)對自定義結(jié)構(gòu)體排序 _c++自定義結(jié)構(gòu)體排序方法詳解

裘德小鎮(zhèn)的故事
發(fā)布: 2025-10-15 18:34:01
原創(chuàng)
211人瀏覽過
答案:C++中對自定義結(jié)構(gòu)體排序可通過比較函數(shù)、重載operator<、lambda表達(dá)式或仿函數(shù)實(shí)現(xiàn),選擇方式取決于使用場景。

c++如何使用sort函數(shù)對自定義結(jié)構(gòu)體排序 _c++自定義結(jié)構(gòu)體排序方法詳解

在C++中,sort函數(shù)可以對基本類型數(shù)組進(jìn)行排序,但當(dāng)我們需要對自定義結(jié)構(gòu)體進(jìn)行排序時,就需要額外提供排序規(guī)則。這通常通過重載操作符或使用比較函數(shù)/lambda表達(dá)式來實(shí)現(xiàn)。下面詳細(xì)介紹幾種常用方法。

1. 定義比較函數(shù)

最直接的方法是寫一個獨(dú)立的比較函數(shù),該函數(shù)接受兩個結(jié)構(gòu)體對象作為參數(shù),返回bool值,表示第一個是否應(yīng)排在第二個之前。

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

struct Student {
    int id;
    string name;
    double score;
};

// 比較函數(shù):按分?jǐn)?shù)從高到低排序
bool cmp(const Student& a, const Student& b) {
    return a.score > b.score;  // 降序
}

// 使用示例
vector<Student> students = {{1, "Alice", 85.5}, {2, "Bob", 90.0}, {3, "Charlie", 78.0}};
sort(students.begin(), students.end(), cmp);
登錄后復(fù)制

2. 重載小于操作符(operator<)

如果結(jié)構(gòu)體有“自然排序”方式,可以在結(jié)構(gòu)體內(nèi)部重載operator<。這樣調(diào)用sort時無需傳入第三個參數(shù)。

即構(gòu)數(shù)智人
即構(gòu)數(shù)智人

即構(gòu)數(shù)智人是由即構(gòu)科技推出的AI虛擬數(shù)字人視頻創(chuàng)作平臺,支持?jǐn)?shù)字人形象定制、短視頻創(chuàng)作、數(shù)字人直播等。

即構(gòu)數(shù)智人36
查看詳情 即構(gòu)數(shù)智人
struct Student {
    int id;
    string name;
    double score;

    // 重載小于操作符:按id升序
    bool operator<(const Student& other) const {
        return id < other.id;
    }
};

// 使用時直接調(diào)用sort
sort(students.begin(), students.end()); // 自動使用operator<
登錄后復(fù)制

3. 使用Lambda表達(dá)式

C++11以后支持lambda,適合臨時定義復(fù)雜排序邏輯,代碼更緊湊。

立即學(xué)習(xí)C++免費(fèi)學(xué)習(xí)筆記(深入)”;

// 按名字字母順序排序
sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
    return a.name < b.name;
});

// 多條件排序:先按分?jǐn)?shù)降序,分?jǐn)?shù)相同按id升序
sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
    if (a.score != b.score)
        return a.score > b.score;
    return a.id < b.id;
});
登錄后復(fù)制

4. 使用仿函數(shù)(函數(shù)對象)

對于需要復(fù)用或帶狀態(tài)的比較邏輯,可定義仿函數(shù)類。

struct CmpByScore {
    bool operator()(const Student& a, const Student& b) const {
        return a.score < b.score; // 升序
    }
};

// 使用
sort(students.begin(), students.end(), CmpByScore());
登錄后復(fù)制

基本上就這些。選擇哪種方式取決于具體需求:簡單場景用比較函數(shù)或operator<,靈活排序用lambda,需保存狀態(tài)用仿函數(shù)。關(guān)鍵是保證比較邏輯滿足嚴(yán)格弱序,避免程序出錯。

以上就是c++++如何使用sort函數(shù)對自定義結(jié)構(gòu)體排序 _c++自定義結(jié)構(gòu)體排序方法詳解的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

相關(guān)標(biāo)簽:
c++速學(xué)教程(入門到精通)
c++速學(xué)教程(入門到精通)

c++怎么學(xué)習(xí)?c++怎么入門?c++在哪學(xué)?c++怎么學(xué)才快?不用擔(dān)心,這里為大家提供了c++速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號