C++對(duì)象排序的比較你了解嗎
1.對(duì)象比較介紹
在排序中進(jìn)行交換的前提主要是進(jìn)行對(duì)象間的 比較、
而常見(jiàn)的排序是對(duì)一個(gè)數(shù)組排序,然后對(duì)每個(gè)數(shù)組內(nèi)容進(jìn)行比較與交換、
如果是對(duì)一個(gè)class進(jìn)行排序,則需要進(jìn)行關(guān)鍵字成員進(jìn)行比較,需要重寫(xiě)下面幾個(gè)操作符:
- bool operator == (const class& t); // 返回ture則表示相等
- bool operator != (const class& t); // 和==相等操作符返回值相反
- bool operator <(const class& t); // 返回true則當(dāng)前對(duì)象小于t對(duì)象
- bool operator > (const class& t);
- bool operator <=(const class& t);
- bool operator >=(const class& t);
比如將學(xué)生成績(jī)單按數(shù)學(xué)成績(jī)由高到低排序,如果數(shù)學(xué)成績(jī)相同的學(xué)生再按英語(yǔ)成績(jī)的高低等級(jí)排序。
2.代碼實(shí)現(xiàn)
代碼如下所示:
#include <iostream> using namespace std; class Student { int number; // 學(xué)號(hào) int mathScore; // 數(shù)學(xué)成績(jī) int enScore; // 英語(yǔ)成績(jī) public: Student() { } Student(int number, int mathScore, int enScore) { this->number = number; this->mathScore = mathScore; this->enScore = enScore; } void printString() { cout<<"number:"<<number <<" mathScore:" << mathScore <<" enScore:"<< enScore << endl; } bool operator == (const Student& t) { return mathScore == t.mathScore && enScore == t.enScore; } // 不等于則調(diào)用==操作符,取反即可 bool operator != (const Student& t) { return !(*this == t); } bool operator <(const Student& t) { return mathScore < t.mathScore || (mathScore == t.mathScore && enScore < t.enScore); } bool operator > (const Student& t) { return mathScore > t.mathScore || (mathScore == t.mathScore && enScore > t.enScore); } bool operator <=(const Student& t) { return !(*this > t); } bool operator >=(const Student& t) { return !(*this < t); } };
測(cè)試代碼如下所示(使用上章我們寫(xiě)的冒泡排序):
Student arr[8] = { Student(1,65,77), Student(2,44,65), Student(3,75,65), Student(4,65,77), Student(5,98,97), Student(6,86,96), Student(7,92,63), Student(8,32,78) }; bubbleSort(arr, 8); // 使用冒泡排序 升序 cout<<"ascend: "<<endl; for (int i = 0; i < 8; ++i) { arr[i].printString(); } cout<<endl; bubbleSort(arr, 8, false); // 使用冒泡排序 降序 cout<<endl<<"descend: "<<endl; for (int i = 0; i < 8; ++i) { arr[i].printString(); }
運(yùn)行打印:
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C語(yǔ)言回調(diào)函數(shù)的簡(jiǎn)單運(yùn)用
回調(diào)函數(shù)就是函數(shù)指針變量作為另外一個(gè)函數(shù)的參數(shù)而使用的一種應(yīng)用情形。本文就詳細(xì)的介紹一下C語(yǔ)言回調(diào)函數(shù)的簡(jiǎn)單運(yùn)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09C++中memcpy函數(shù)的使用以及模擬實(shí)現(xiàn)
memcpy是c和c++使用的內(nèi)存拷貝函數(shù),本文主要介紹了C++中memcpy函數(shù)的使用以及模擬實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07C語(yǔ)言輸出孿生素?cái)?shù)的實(shí)現(xiàn)示例
本文主要介紹了C語(yǔ)言輸出孿生素?cái)?shù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01C語(yǔ)言從代碼中加載動(dòng)態(tài)鏈接庫(kù)過(guò)程解析
這篇文章主要介紹了C語(yǔ)言從代碼中加載動(dòng)態(tài)鏈接庫(kù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12C++實(shí)現(xiàn)學(xué)生選課系統(tǒng)的思路與詳細(xì)過(guò)程
C語(yǔ)言是在國(guó)內(nèi)外廣泛使用的一種計(jì)算機(jī)語(yǔ)言,下面這篇文章主要給大家介紹了關(guān)于C++實(shí)現(xiàn)學(xué)生選課系統(tǒng)的思路與詳細(xì)過(guò)程,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01C++ 在堆上開(kāi)辟與釋放二維、三維指針詳細(xì)解析
一維指針其實(shí)就相當(dāng)于一維數(shù)組,不用去看書(shū)上所說(shuō)的數(shù)組在內(nèi)存中的首地址這些晦澀的話,以此類推 二維指針就相當(dāng)于二維數(shù)組,新手對(duì)一維數(shù)組的開(kāi)辟與釋放比較容易熟悉2013-09-09C++實(shí)現(xiàn)LeetCode(47.全排列之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(47.全排列之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07