C++使用vector按多欄位排序。
C++當中vector的資料型別是基本型別時,我們利用std::sort很容易排序,當我們的型別是自定義的結構體,並且我們還要實現按多欄位排序,我有兩種方法:
1.我們通過過載operator方法來實現:
本例子實現了struct中多個欄位排序:
[cpp] view plaincopyprint?- #include<iostream>
- #include<vector>
- #include<string>
- #include<algorithm>
- usingnamespace std;
- typedefstruct _JOBLOG_READ_INFO
- {
- char szSTN[4];
- char szLM[4];
- char szJSPM[4];
- _JOBLOG_READ_INFO()
- {
- memset(szSTN,0,4);
- memset(szLM,0,4);
- memset(szJSPM,0,4);
- }
- //過載處↓
- bool operator < (const _JOBLOG_READ_INFO &other) const
- {
- if(memcmp(szSTN,other.szSTN,4) < 0)
- returntrue;
- elseif(memcmp(szSTN,other.szSTN,4) > 0)
- returnfalse;
- if(memcmp(szLM,other.szLM,4) < 0)
- returntrue;
- elseif(memcmp(szLM,other.szLM,4) > 0)
- returnfalse;
- if(memcmp(szJSPM,other.szJSPM,4) < 0)
- returntrue;
- else
- returnfalse;
- }
- //過載處↑
- }JOBLOG_READ_INFO, *LPJOBLOG_READ_INFO;
- int main()
- {
- vector<JOBLOG_READ_INFO> vecJobInfo;
- vector<JOBLOG_READ_INFO>::iterator iter;
- JOBLOG_READ_INFO tempVecJobInfo1;
- JOBLOG_READ_INFO tempVecJobInfo2;
- JOBLOG_READ_INFO tempVecJobInfo3;
- JOBLOG_READ_INFO tempVecJobInfo4;
- //add the value to tempVecJobinfo1
- strcpy(tempVecJobInfo1.szSTN,"001");
- strcpy(tempVecJobInfo1.szLM,"ABC");
- strcpy(tempVecJobInfo1.szJSPM,"XX1");
- //add the value to tempVecJobinfo2
- strcpy(tempVecJobInfo2.szSTN,"002");
- strcpy(tempVecJobInfo2.szLM,"ABC");
- strcpy(tempVecJobInfo2.szJSPM,"XX2");
- //add the value to tempVecJobinfo3
- strcpy(tempVecJobInfo3.szSTN,"002");
- strcpy(tempVecJobInfo3.szLM,"BBC");
- strcpy(tempVecJobInfo3.szJSPM,"XX3");
- //add the value to tempVecJobinfo4
- strcpy(tempVecJobInfo4.szSTN,"002");
- strcpy(tempVecJobInfo4.szLM,"BBC");
- strcpy(tempVecJobInfo4.szJSPM,"XX2");
- vecJobInfo.push_back(tempVecJobInfo3);
- vecJobInfo.push_back(tempVecJobInfo1);
- vecJobInfo.push_back(tempVecJobInfo2);
- vecJobInfo.push_back(tempVecJobInfo4);
- // vector<JOBLOG_READ_INFO>::iterator iter;
- for(iter = vecJobInfo.begin(); iter != vecJobInfo.end();iter++)
- {
- cout << iter->szSTN
- << iter->szLM
- << iter->szJSPM
- << endl;
- }
- //呼叫處↓
- sort(vecJobInfo.begin(),vecJobInfo.end());
- //呼叫處↑
- cout<<"result of sorting is :"<<endl;
- for(iter = vecJobInfo.begin(); iter != vecJobInfo.end();iter++)
- {
- cout << iter->szSTN
- << iter->szLM
- << iter->szJSPM
- << endl;
- }
- return 0;
- }
2.我們通過函式物件來實現:
[cpp] view plaincopyprint?- // VectorSortDemo.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
- //
- #include<iostream>
- #include<vector>
- #include<string>
- #include<algorithm>
- usingnamespace std;
- typedefstruct _JOBLOG_READ_INFO
- {
- char szSTN[4];
- char szLM[4];
- char szJSPM[4];
- _JOBLOG_READ_INFO()
- {
- memset(szSTN,0,4);
- memset(szLM,0,4);
- memset(szJSPM,0,4);
- }
- /* bool operator < (const _JOBLOG_READ_INFO &other) const
- {
- if(memcmp(szSTN,other.szSTN,4) < 0)
- return true;
- else if(memcmp(szSTN,other.szSTN,4) > 0)
- return false;
- if(memcmp(szLM,other.szLM,4) < 0)
- return true;
- else if(memcmp(szLM,other.szLM,4) > 0)
- return false;
- if(memcmp(szJSPM,other.szJSPM,4) < 0)
- return true;
- else
- return false;
- }*/
- }JOBLOG_READ_INFO, *LPJOBLOG_READ_INFO;
- //判斷標準的定義↓
- bool stdSort(const JOBLOG_READ_INFO& jobLogInfo1, const JOBLOG_READ_INFO& jobLogInfo2)
- {
- if(memcmp(jobLogInfo1.szSTN, jobLogInfo2.szSTN, 4) < 0)
- returntrue;
- elseif(memcmp(jobLogInfo1.szSTN, jobLogInfo2.szSTN, 4) > 0)
- returnfalse;
- if(memcmp(jobLogInfo1.szLM,jobLogInfo2.szLM, 4) < 0)
- returntrue;
- elseif(memcmp(jobLogInfo1.szLM,jobLogInfo2.szLM, 4) > 0)
- returnfalse;
- if(memcmp(jobLogInfo1.szJSPM,jobLogInfo2.szJSPM, 4) < 0)
- returntrue;
- else
- returnfalse;
- }
- //判斷標準的定義↑
- int main()
- {
- vector<JOBLOG_READ_INFO> vecJobInfo;
- vector<JOBLOG_READ_INFO>::iterator iter;
- JOBLOG_READ_INFO tempVecJobInfo1;
- JOBLOG_READ_INFO tempVecJobInfo2;
- JOBLOG_READ_INFO tempVecJobInfo3;
- JOBLOG_READ_INFO tempVecJobInfo4;
- //add the value to tempVecJobinfo1
- strcpy(tempVecJobInfo1.szSTN,"001");
- strcpy(tempVecJobInfo1.szLM,"ABC");
- strcpy(tempVecJobInfo1.szJSPM,"XX1");
- //add the value to tempVecJobinfo2
- strcpy(tempVecJobInfo2.szSTN,"002");
- strcpy(tempVecJobInfo2.szLM,"ABC");
- strcpy(tempVecJobInfo2.szJSPM,"XX2");
- //add the value to tempVecJobinfo3
- strcpy(tempVecJobInfo3.szSTN,"002");
- strcpy(tempVecJobInfo3.szLM,"BBC");
- strcpy(tempVecJobInfo3.szJSPM,"XX3");
- //add the value to tempVecJobinfo4
- strcpy(tempVecJobInfo4.szSTN,"002");
- strcpy(tempVecJobInfo4.szLM,"BBC");
- strcpy(tempVecJobInfo4.szJSPM,"XX2");
- vecJobInfo.push_back(tempVecJobInfo3);
- vecJobInfo.push_back(tempVecJobInfo1);
- vecJobInfo.push_back(tempVecJobInfo2);
- vecJobInfo.push_back(tempVecJobInfo4);
- // vector<JOBLOG_READ_INFO>::iterator iter;
- for(iter = vecJobInfo.begin(); iter != vecJobInfo.end();iter++)
- {
- cout << iter->szSTN
- << iter->szLM
- << iter->szJSPM
- << endl;
- }
- // sort(vecJobInfo.begin(),vecJobInfo.end());
- /*******************呼叫處↓*******************************/
- sort(vecJobInfo.begin(),vecJobInfo.end(),stdSort);
- /*******************呼叫處↑******************************/
- cout<<"result of sorting is :"<<endl;
- for(iter = vecJobInfo.begin(); iter != vecJobInfo.end();iter++)
- {
- cout << iter->szSTN
- << iter->szLM
- << iter->szJSPM
- << endl;
- }
- return 0;
- }
程式結果:
=========================
002BBCXX3
001ABCXX1
002ABCXX2
002BBCXX2
result of sorting is :
001ABCXX1
002ABCXX2
002BBCXX2
002BBCXX3
========================
相關推薦
C++使用vector按多欄位排序。
C++當中vector的資料型別是基本型別時,我們利用std::sort很容易排序,當我們的型別是自定義的結構體,並且我們還要實現按多欄位排序,我有兩種方法: 1.我們通過過載operator方法來實現: 本例子實現了struct中多個欄位排序: [cpp] view
C#List Sort多欄位排序
多欄位排序的問題其實很簡單,只要實現一個自己的Comparator就可以。 例如我有一個類class Student { public String name; public int id; public char gender; public Student(S
C++ vector多欄位排序
C++當中vector的資料型別是基本型別時,我們利用std::sort很容易排序,當我們的型別是自定義的結構體,並且我們還要實現按多欄位排序,我有兩種方法: 1.我們通過過載operator方法來實現: 本例子實現了struct中多個欄位排序:
oracle的多欄位排序去重Row Number Over Partition By A B Order By C
今天遇到需要在多條有重複欄位的記錄中選取修改日期最接近現在的欄位,如下:我想要選取CPDM,FBQD相同,KSRQ離現在最近的那條記錄,選出的記錄應該為1、2、3,而4、5、6、7應該捨棄掉。我們使用這條語句:Row_Number() Over(Partition By Cpd
jeecg中的查詢實體CriteriaQuery的多欄位排序的實現
jeecg中的查詢實體CriteriaQuery的多欄位排序的實現: 先按照orgName逆序排序,再按照name逆序排序,如下: CriteriaQuery cq = new CriteriaQuery(VAssessTeacherInfoEntity.class, da
mysql order by field 按指定欄位排序
舉個例子 a表裡有b欄位 b欄位裡有資料-1,1,2,3,4 如果想把4,2,3的排在最前面,其他的排在後面,並且保留4,2,3的順序 sql: select * from a order by FIELD(3,2,4) DESC 如果是這樣寫sql: s
python sort搭配lambda實現多欄位排序
sort的常用方法你一定都會了,但是如果要排序的物件的每個元素又含有多個元素,要按指定的內部某個元素排序該怎麼實現呢?正常是這樣來做的: >>> def return_item(item): ... return item[1] >>> pairs
mysql 多欄位排序
1、排序關鍵字 ASC:升序; DESC:降序; 2、單欄位排序 單欄位降序 SELECT * FROM USER ORDER BY id DESC; 3、多欄位排序 多欄位排序只需要新增多個排序條件,並且每個排序的條件之前用逗號分開。 SELEC
List>按某個欄位排序
對service層返回的資料進行排序 1、controller @GetMapping(value = "/per/{perId}", produces = {"application/json;c
java8 stream代替for迴圈 sort多欄位排序 group by多級排序
List<MacTicket> list = new ArrayList(); Category ctg= new Category(); ctg.setType(1);//0商品,1銷售規格 ctg.setSort(2); ctg.setInheritFlag(0);/
SQL查詢按某欄位排序的最大值
1.建表 -- Create table create table FRUIT ( id VARCHAR2(20), name VARCHAR2(20), class VARCHAR2(20), count VARCHAR2(20),
sql 語句查詢 按某欄位去重 保留按某個欄位排序top1
例子: create table tablename (id int identity(1,1),attachid int,name varchar(10)) insert into tablename values(23,'sss') insert into tabl
solr搜尋結果按某欄位排序
如果想要搜尋結果按某一field排序, 而相同的field情況下匹配度高的優先 1) 使用sort 可見使用sort排序只滿足將section=3的排在前面, 但是同樣都是section為3的不符合按相似度排序 2) 應該對排序欄位加權才是正解
sql多條件多欄位排序
語句: 複製程式碼 程式碼如下: select * from [User] order by [Password] desc,Id asc 在一個條件重複的情況下,使用第二個條件排序如下: 注意這裡的第 14,15條記錄(在Password相同的情況下,
oracle中按指定欄位排序刪除重複記錄
今天看了一下專案上的DBA針對某一模組中的業務寫的儲存過程,裡面資料清洗的過程中時常會進行排重操作,自己總結了一下oracle中排重的思路1,使用rowid來作為限制條件排重rowid與rownum的區別兩者都是偽列,rowid是物理結構上的,而rownum是邏
jqgrid多欄位排序引數
var config = { title: '選單列表', url: '@Url.Action("GetListWithPager")', mtype: 'post',
Oracle,SQL多重排序--多欄位排序
我們在查詢出資料的時候,需要根據某幾個欄位進行排序。 比如:查詢車輛的時候,根據車輛的型別或者註冊時間查詢車輛資訊,然後根據車輛的號碼排序,再根據車輛型別進行排序,再或者根據車輛的註冊時間進行排序。具體的查詢語句應該是: Sql程式碼 select hphm,
記一次多欄位排序的sql使用if語句問題
以上語句無法滿足要求 實現如下: 1、mysql和oracle都支援 SELECT department_id,orde
SQL 按多個欄位排序的實現
目前有表 brand ,資料如下: 注意圖中 紅色標記的地方。 現在 那麼執行下面sql語句:select brand_no ,seq_no from brand order by seq_no desc, brand_no desc; 得到的結
excel如何對資料進行多欄位同時排序、多條件組合和多條件篩選呢
對資料的排序不僅可以是對單列或單行進行排序,還可以進行多欄位同時排序,從而達到想要的效果。excel如何對資料進行多欄位同時排序、多條件組合和多條件篩選呢如圖所示 【解決方法,教程視訊資料如下】 本教程視訊資料來源:http://edu.51cto.com/course/15404.html 完整部落格