c++自定義sort()函數(shù)的排序方法介紹_第1頁
c++自定義sort()函數(shù)的排序方法介紹_第2頁
c++自定義sort()函數(shù)的排序方法介紹_第3頁
c++自定義sort()函數(shù)的排序方法介紹_第4頁
全文預覽已結(jié)束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論