下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第c++自定義sort()函數(shù)的排序方法介紹目錄1.引言2.自定義排序規(guī)則2.1重寫或運算符2.2普通函數(shù)2.3仿函數(shù)
1.引言
在C++中,sort()函數(shù)常常用來對容器內(nèi)的元素進行排序,先來了解一下sort()函數(shù)。
sort()函數(shù)有三個參數(shù):
第一個是要排序的容器的起始迭代器。第二個是要排序的容器的結(jié)束迭代器。第三個參數(shù)是排序的方法,是可選的參數(shù)。默認的排序方法是從小到大排序,也就是lessType(),還提供了greaterType()進行從大到小排序。這個參數(shù)的類型是函數(shù)指針,less和greater實際上都是類/結(jié)構(gòu)體,內(nèi)部分別重載了()運算符,稱為仿函數(shù),所以實際上lessType()和greaterType()都是函數(shù)名,也就是函數(shù)指針。我們還可以用普通函數(shù)來定義排序方法。
如果容器內(nèi)元素的類型是內(nèi)置類型或string類型,我們可以直接用lessType()或greaterType()進行排序。但是如果數(shù)據(jù)類型是我們自定義的結(jié)構(gòu)體或者類的話,我們需要自定義排序函數(shù),
有三種寫法:
重載或運算符:重載運算符,傳入lessType()進行升序排列。重載運算符,傳入greaterType()進行降序排列。這種方法只能針對一個維度排序,不靈活。普通函數(shù):寫普通函數(shù)cmp,傳入cmp按照指定規(guī)則排列。這種方法可以對多個維度排序,更靈活。仿函數(shù):寫仿函數(shù)cmp,傳入cmpType()按照指定規(guī)則排列。這種方法可以對多個維度排序,更靈活。
2.自定義排序規(guī)則
2.1重寫或運算符
#includebits/stdc++.h
usingnamespacestd;
structPerson{
intid;
intage;
Person(intid,intage):id(id),age(age){}
//重載運算符,進行升序排列
booloperator(constPersonp2)const{
returnidp2.id;
//重載運算符,進行降序排列
booloperator(constPersonp2)const{
returnidp2.id;
intmain()
Personp1(1,10),p2(2,20),p3(3,30);
vectorPerson
ps.push_back(p2);
ps.push_back(p1);
ps.push_back(p3);
sort(ps.begin(),ps.end(),lessPerson
for(inti=0;ii++){
coutps[i].id""ps[i].ageendl;
coutendl;
sort(ps.begin(),ps.end(),greaterPerson
for(inti=0;ii++){
coutps[i].id""ps[i].ageendl;
coutendl;
}
2.2普通函數(shù)
#includebits/stdc++.h
usingnamespacestd;
structPerson{
intid;
intage;
Person(intid,intage):id(id),age(age){}
//普通函數(shù)
boolcmp(constPersonp1,constPersonp2){
if(p1.id==p2.id)returnp1.age=p2.age;
returnp1.idp2.id;
intmain()
Personp1(1,10),p2(2,20),p3(3,30),p4(3,40);
vectorPerson
ps.push_back(p2);
ps.push_back(p1);
ps.push_back(p3);
ps.push_back(p4);
sort(ps.begin(),ps.end(),cmp);//傳入函數(shù)指針cmp
for(inti=0;ii++){
coutps[i].id""ps[i].ageendl;
}
2.3仿函數(shù)
#includebits/stdc++.h
usingnamespacestd;
structPerson{
intid;
intage;
Person(intid,intage):id(id),age(age){}
//仿函數(shù)
structcmp{
booloperator()(constPersonp1,constPersonp2){
if(p1.id==p2.id)returnp1.age=p2.age;
returnp1.idp2.id;
intmain()
Personp1(1,10),p2(2,20),p3(3,30),p4(3,40);
vectorPerson
ps.push_back(p2);
ps.push_back(p1);
ps.push_back(p3);
ps.push_back(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖南省衡陽市常寧市2025-2026學年七年級上學期期末質(zhì)量監(jiān)測道德與法治試卷(含答案)
- 安徽省蚌埠市固鎮(zhèn)縣部分學校2025-2026學年九年級上學期1月期末數(shù)學試題答案
- 2025-2026學年山東煙臺長島第二實驗學校 九年級(上下冊)期末道德與法治試卷(無答案)
- 五年級數(shù)學期末考試卷及答案
- 為民服務題庫及答案
- 網(wǎng)絡的題目及答案
- 初中數(shù)學培訓
- 北京警察學院《Photoshop 圖像處理》2024 - 2025 學年第一學期期末試卷
- 2022~2023安全員考試題庫及答案第254期
- 部編人教版二年級語文(下冊)期末試卷及答案(匯編)
- 特種工安全崗前培訓課件
- 新疆維吾爾自治區(qū)普通高中2026屆高二上數(shù)學期末監(jiān)測試題含解析
- 2026屆福建省三明市第一中學高三上學期12月月考歷史試題(含答案)
- 2026年遼寧金融職業(yè)學院單招職業(yè)技能測試題庫附答案解析
- (正式版)DB51∕T 3342-2025 《爐灶用合成液體燃料經(jīng)營管理規(guī)范》
- 2026北京海淀初三上學期期末語文試卷和答案
- 2024-2025學年北京市東城區(qū)五年級(上)期末語文試題(含答案)
- 人工智能在醫(yī)療領域的應用
- 2025學年度人教PEP五年級英語上冊期末模擬考試試卷(含答案含聽力原文)
- 【10篇】新部編五年級上冊語文課內(nèi)外閱讀理解專項練習題及答案
- 南京市雨花臺區(qū)醫(yī)療保險管理中心等單位2025年公開招聘編外工作人員備考題庫有完整答案詳解
評論
0/150
提交評論