C vector多欄位排序

2021-08-08 22:04:40 字數 3715 閱讀 7473

c++當中vector的資料型別是基本型別時,我們利用std::sort很容易排序,當我們的型別是自定義的結構體,並且我們還要實現按多字段排序,我有兩種方法:

1.我們通過過載operator方法來實現:

本例子實現了struct中多個字段排序:

[cpp]

view plain

copy

#include

#include

#include

#include

using

namespace

std;  

typedef

struct

_joblog_read_info  

//過載處↓ 

bool

operator < (

const

_joblog_read_info &other) 

const

//過載處↑ 

}joblog_read_info, *lpjoblog_read_info;  

intmain()  

//呼叫處↓ 

sort(vecjobinfo.begin(),vecjobinfo.end());  

//呼叫處↑ 

cout<<

"result of sorting is :"

<

for(iter = vecjobinfo.begin(); iter != vecjobinfo.end();iter++)  

return

0;  

}  

[cpp]view plain

copy

#include

#include

#include

#include

using

namespace

std;  

typedef

struct

_joblog_read_info  

//過載處↓

bool

operator < (

const

_joblog_read_info &other) 

const

//過載處↑

}joblog_read_info, *lpjoblog_read_info;  

intmain()  

//呼叫處↓

sort(vecjobinfo.begin(),vecjobinfo.end());  

//呼叫處↑

cout<<"result of sorting is :"

<

for(iter = vecjobinfo.begin(); iter != vecjobinfo.end();iter++)  

return

0;  

}  

2.我們通過函式物件來實現:

[cpp]

view plain

copy

// vectorsortdemo.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 

// #include

#include

#include

#include

using

namespace

std;  

typedef

struct

_joblog_read_info  

/* bool operator < (const _joblog_read_info &other) const

*/}joblog_read_info, *lpjoblog_read_info;  

//判斷標準的定義↓ 

bool

stdsort(

const

joblog_read_info& jobloginfo1, 

const

joblog_read_info& jobloginfo2)  

//判斷標準的定義↑ 

intmain()  

//  sort(vecjobinfo.begin(),vecjobinfo.end()); 

/*******************呼叫處↓*******************************/

sort(vecjobinfo.begin(),vecjobinfo.end(),stdsort);  

/*******************呼叫處↑******************************/

cout<<

"result of sorting is :"

<

for(iter = vecjobinfo.begin(); iter != vecjobinfo.end();iter++)  

return

0;  

}  

[cpp]view plain

copy

// vectorsortdemo.cpp : コンソール アプリケーションのエントリ ポイントを定義します。

//#include

#include

#include

#include

using

namespace

std;  

typedef

struct

_joblog_read_info  

/* bool operator < (const _joblog_read_info &other) const

*/}joblog_read_info, *lpjoblog_read_info;  

//判斷標準的定義↓

bool

stdsort(

const

joblog_read_info& jobloginfo1, 

const

joblog_read_info& jobloginfo2)  

//判斷標準的定義↑

intmain()  

//  sort(vecjobinfo.begin(),vecjobinfo.end());

/*******************呼叫處↓*******************************/

sort(vecjobinfo.begin(),vecjobinfo.end(),stdsort);  

/*******************呼叫處↑******************************/

cout<<"result of sorting is :"

<

for(iter = vecjobinfo.begin(); iter != vecjobinfo.end();iter++)  

return

0;  

}  

程式結果:

*************************

002bbcxx3

001abcxx1

002abcxx2

002bbcxx2

result of sorting is :

001abcxx1

002abcxx2

002bbcxx2

002bbcxx3

********************====

linux sort 多欄位排序

linux多數發行版自帶的sort程式,非常強大,在此只說多字段排序 sort 有個引數 k,可以指定字段,有比較複雜的語法,不在文字範圍內。一下為一段資料 從基因中得到,僅僅作為demo 檔名為 data chr13 3008566 3008677 chr9 3024384 3024515 chr...

轉 多欄位排序

多欄位排序的問題其實很簡單,只要實現乙個自己的comparator就可以。例如我有乙個類 class student 然後我有乙個arraylist,新增了三個學生進去 public static void main string args 我的排序規則是,先按名字牌,如果名字一樣的,按照id來排,...

Mysql order by 多欄位排序

降序desc 由大到小 公升序asc 由小到大 mysql單個字段降序排序 select from table order by id desc mysql單個字段公升序排序 select from table order by id asc mysql多個字段排序 select from tabl...