1. 程式人生 > >C++ vector多欄位排序

C++ vector多欄位排序

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

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

本例子實現了struct中多個欄位排序

  1. #include<iostream> 
  2. #include<vector> 
  3. #include<string> 
  4. #include<algorithm> 
  5. usingnamespace std;  
  6. typedefstruct _JOBLOG_READ_INFO  
  7. {  
  8. char szSTN[4];  
  9. char szLM[4];  
  10. char szJSPM[4];  
  11.    _JOBLOG_READ_INFO()  
  12.    {  
  13.        memset(szSTN,0,4);  
  14.        memset(szLM,0,4);  
  15.        memset(szJSPM,0,4);  
  16.    }  
  17. //過載處↓ 
  18. bool operator < (const _JOBLOG_READ_INFO &other) const
  19.    {  
  20. if(memcmp(szSTN,other.szSTN,4) < 0)  
  21. return
    true;  
  22. elseif(memcmp(szSTN,other.szSTN,4) > 0)  
  23. returnfalse;  
  24. if(memcmp(szLM,other.szLM,4) < 0)  
  25. returntrue;  
  26. elseif(memcmp(szLM,other.szLM,4) > 0)  
  27. returnfalse;  
  28. if(memcmp(szJSPM,other.szJSPM,4) < 0)  
  29. returntrue;  
  30. else
  31. returnfalse;  
  32.    }  
  33. //過載處↑ 
  34. }JOBLOG_READ_INFO, *LPJOBLOG_READ_INFO;  
  35. int main()  
  36. {  
  37.     vector<JOBLOG_READ_INFO> vecJobInfo;  
  38.     vector<JOBLOG_READ_INFO>::iterator iter;  
  39.     JOBLOG_READ_INFO tempVecJobInfo1;  
  40.     JOBLOG_READ_INFO tempVecJobInfo2;  
  41.     JOBLOG_READ_INFO tempVecJobInfo3;  
  42.     JOBLOG_READ_INFO tempVecJobInfo4;  
  43. //add the value to tempVecJobinfo1 
  44.     strcpy(tempVecJobInfo1.szSTN,"001");  
  45.     strcpy(tempVecJobInfo1.szLM,"ABC");  
  46.     strcpy(tempVecJobInfo1.szJSPM,"XX1");  
  47. //add the value to tempVecJobinfo2 
  48.     strcpy(tempVecJobInfo2.szSTN,"002");  
  49.     strcpy(tempVecJobInfo2.szLM,"ABC");  
  50.     strcpy(tempVecJobInfo2.szJSPM,"XX2");  
  51. //add the value to tempVecJobinfo3 
  52.     strcpy(tempVecJobInfo3.szSTN,"002");  
  53.     strcpy(tempVecJobInfo3.szLM,"BBC");  
  54.     strcpy(tempVecJobInfo3.szJSPM,"XX3");  
  55. //add the value to tempVecJobinfo4 
  56.     strcpy(tempVecJobInfo4.szSTN,"002");  
  57.     strcpy(tempVecJobInfo4.szLM,"BBC");  
  58.     strcpy(tempVecJobInfo4.szJSPM,"XX2");  
  59.     vecJobInfo.push_back(tempVecJobInfo3);  
  60.     vecJobInfo.push_back(tempVecJobInfo1);  
  61.     vecJobInfo.push_back(tempVecJobInfo2);  
  62.     vecJobInfo.push_back(tempVecJobInfo4);    
  63. //  vector<JOBLOG_READ_INFO>::iterator iter;      
  64. for(iter = vecJobInfo.begin(); iter != vecJobInfo.end();iter++)  
  65.     {  
  66.         cout << iter->szSTN   
  67.              << iter->szLM   
  68.              << iter->szJSPM   
  69.              << endl;  
  70.     }  
  71. //呼叫處↓ 
  72.     sort(vecJobInfo.begin(),vecJobInfo.end());  
  73. //呼叫處↑ 
  74.     cout<<"result of sorting is :"<<endl;  
  75. for(iter = vecJobInfo.begin(); iter != vecJobInfo.end();iter++)  
  76.     {  
  77.         cout << iter->szSTN   
  78.              << iter->szLM   
  79.              << iter->szJSPM   
  80.              << endl;  
  81.     }  
  82. return 0;  
  83. }  
  1. #include<iostream>
  2. #include<vector>
  3. #include<string>
  4. #include<algorithm>
  5. usingnamespace std;  
  6. typedefstruct _JOBLOG_READ_INFO  
  7. {  
  8.    char szSTN[4];  
  9.    char szLM[4];  
  10.    char szJSPM[4];  
  11.    _JOBLOG_READ_INFO()  
  12.    {  
  13.        memset(szSTN,0,4);  
  14.        memset(szLM,0,4);  
  15.        memset(szJSPM,0,4);  
  16.    }  
  17. //過載處↓
  18.    bool operator < (const _JOBLOG_READ_INFO &other) const
  19.    {  
  20.        if(memcmp(szSTN,other.szSTN,4) < 0)  
  21.            return

    相關推薦

    C++ vector排序

    C++當中vector的資料型別是基本型別時,我們利用std::sort很容易排序,當我們的型別是自定義的結構體,並且我們還要實現按多欄位排序,我有兩種方法: 1.我們通過過載operator方法來實現: 本例子實現了struct中多個欄位排序:

    C++使用vector排序

    C++當中vector的資料型別是基本型別時,我們利用std::sort很容易排序,當我們的型別是自定義的結構體,並且我們還要實現按多欄位排序,我有兩種方法: 1.我們通過過載operator方法來實現: 本例子實現了struct中多個欄位排序: [cpp] view

    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

    C#List Sort排序

    多欄位排序的問題其實很簡單,只要實現一個自己的Comparator就可以。  例如我有一個類class Student {  public String name;  public int id;  public char gender;  public Student(S

    jeecg中的查詢實體CriteriaQuery的排序的實現

    jeecg中的查詢實體CriteriaQuery的多欄位排序的實現: 先按照orgName逆序排序,再按照name逆序排序,如下: CriteriaQuery cq = new CriteriaQuery(VAssessTeacherInfoEntity.class, da

    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

    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條件排序

    語句:   複製程式碼 程式碼如下:   select * from [User] order by [Password] desc,Id asc 在一個條件重複的情況下,使用第二個條件排序如下:     注意這裡的第  14,15條記錄(在Password相同的情況下,

    jqgrid排序引數

    var config = { title: '選單列表', url: '@Url.Action("GetListWithPager")', mtype: 'post',

    Oracle,SQL多重排序--排序

    我們在查詢出資料的時候,需要根據某幾個欄位進行排序。 比如:查詢車輛的時候,根據車輛的型別或者註冊時間查詢車輛資訊,然後根據車輛的號碼排序,再根據車輛型別進行排序,再或者根據車輛的註冊時間進行排序。具體的查詢語句應該是: Sql程式碼  select hphm,

    記一次排序的sql使用if語句問題

    以上語句無法滿足要求 實現如下: 1、mysql和oracle都支援 SELECT department_id,orde

    excel如何對資料進行同時排序條件組合和條件篩選呢

    對資料的排序不僅可以是對單列或單行進行排序,還可以進行多欄位同時排序,從而達到想要的效果。excel如何對資料進行多欄位同時排序、多條件組合和多條件篩選呢如圖所示 【解決方法,教程視訊資料如下】 本教程視訊資料來源:http://edu.51cto.com/course/15404.html 完整部落格

    LINQ使用Orderby、ThenBy實現排序

    LINQ中的排序操作符,包括:OrderBy、OrderByDescending、ThenBy、ThenByDescending、Reverse,提供了升序或者降序排序。 OrderBy:按升序對序列的元素進行排序。 OrderByDescending:按降序對序列的元素排序。 ThenBy:按

    mysql order by排序

    MySql Order By 多個欄位 排序規則比如:如要根據ConfigID和MarketID來排序有如下語句:SELECT * FROM TABLE ORDER BY ConfigID, MarketID DESC;那麼結果:分析:其實這個語句等同於:先按照ConfigI

    mysql group_concat 分組,統一排序及輸出資料到java

    本文不涉及mysql的配置,bean的建立和使用,資料庫連線等教程,僅介紹group_concat輸出到java 假設我們有如下資料 目標:輸出goodsId為1002,已顏色分組的資料。 首先編輯一下sql語句 String sql ="SEL

    SQL 按排序的實現

    目前有表 brand ,資料如下: 注意圖中 紅色標記的地方。 現在 那麼執行下面sql語句:select brand_no ,seq_no from brand order by seq_no desc, brand_no desc; 得到的結

    在Java中使用Collections.sort 依據排序

    ## 一、如何使用Collections工具類進行排序 使用Collections工具類進行排序主要有兩種方式: ### 1.物件實現Comparable介面,重寫compareTo方法 ```java /** * @author Hanstrovsky */ @Data @AllArgsConst

    哇,ElasticSearch權重排序居然可以這麼玩

    ## 背景 **讀者提問:ES 的權重排序有沒有示列,參考參考?** 剛好之前也稍微接觸過,於是寫了這篇文章,可以簡單參考下。 在很多複雜的業務場景下,排序的規則會比較複雜,單一的降序,升序無法滿足日常需求。不過 ES 中提供了給文件加權重的方式來排序,還是挺好用的。 首先初始化三條測試資料,方便檢視

    mybaits 按照排序問題

    mybaits 按照欄位排序問題 傳一個map,key表示欄位名, value (true 表示正排序,false 表示反排序): 基礎程式碼 LinkedHashMap<String, Boolean> map = new LinkedHashMap<&