• 使用STL库sort函数对vector进行排序


    使用STL库sort函数对vector进行排序,vector的内容为对象的指针,而不是对象。

    代码如下

     1 #include <stdio.h>
     2 #include <vector>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 class Elm
     8 {
     9     public:
    10         int m_iSortProof;
    11 
    12     private:
    13         int __m_iValue;
    14         static int __m_iCnt;
    15 
    16     public:
    17         Elm();
    18         int getValue(int iX);
    19         void printElm();
    20 };
    21 
    22 int Elm::__m_iCnt = 0;
    23 
    24 Elm::Elm()
    25 {
    26     __m_iCnt ++;
    27     __m_iValue = __m_iCnt;
    28     m_iSortProof = getValue(__m_iCnt);
    29 }
    30 
    31 /* (x-10.3)^2 + 0.6*/
    32 int Elm::getValue(int iX)
    33 {
    34     float fX = (float)iX - 10.3;
    35 
    36     float fY = fX * fX + 0.6;
    37 
    38     return (int)fY;
    39 }
    40 
    41 void Elm::printElm()
    42 {
    43     printf("value : %3d, proof : %3d
    ", __m_iValue, m_iSortProof);
    44 }
    45 
    46 /*z -> a*/
    47 bool compare(const Elm * a, const Elm * b)
    48 {
    49     return a->m_iSortProof > b->m_iSortProof;
    50 }
    51 
    52 int main(int argc, char * argv[])
    53 {
    54     vector<Elm *> vecpList;
    55     int i = 0;
    56     for(i = 0; i < 20; i++)
    57     {
    58         Elm * pElm = new Elm;
    59         vecpList.push_back(pElm);
    60     }
    61     for(vector<Elm *>::iterator pE = vecpList.begin(); pE != vecpList.end(); pE++)
    62     {
    63         (*pE)->printElm();
    64     }
    65     /*使用sort对vector进行排序*/
    66     sort(vecpList.begin(), vecpList.end(), compare);
    67     printf("33[0;34m----------------sorted----------------33[0m
    ");
    68     for(vector<Elm *>::iterator pE = vecpList.begin(); pE != vecpList.end(); pE++)
    69     {
    70         (*pE)->printElm();
    71     }
    72 
    73     return 0;
    74 }

    运行结果如下

      1、排序前

    value :   1, proof :  87
    value :   2, proof :  69
    value :   3, proof :  53
    value :   4, proof :  40
    value :   5, proof :  28
    value :   6, proof :  19
    value :   7, proof :  11
    value :   8, proof :   5
    value :   9, proof :   2
    value :  10, proof :   0
    value :  11, proof :   1
    value :  12, proof :   3
    value :  13, proof :   7
    value :  14, proof :  14
    value :  15, proof :  22
    value :  16, proof :  33
    value :  17, proof :  45
    value :  18, proof :  59
    value :  19, proof :  76
    value :  20, proof :  94

      排序后

    value :  20, proof :  94
    value :   1, proof :  87
    value :  19, proof :  76
    value :   2, proof :  69
    value :  18, proof :  59
    value :   3, proof :  53
    value :  17, proof :  45
    value :   4, proof :  40
    value :  16, proof :  33
    value :   5, proof :  28
    value :  15, proof :  22
    value :   6, proof :  19
    value :  14, proof :  14
    value :   7, proof :  11
    value :  13, proof :   7
    value :   8, proof :   5
    value :  12, proof :   3
    value :   9, proof :   2
    value :  11, proof :   1
    value :  10, proof :   0
  • 相关阅读:
    FSBQPIDMI总线的区别
    为什么PCI-e比SATA快这么多?
    chage命令管理用户口令时效
    账户管理groupadd groupmod groupdel usermod usermod userdel
    linux 里 /etc/passwd 、/etc/shadow和/etc/group 文件内容解释
    RPM常见用法
    智力逻辑题
    Android ROM 制作教程
    智能家居项目(2):项目project框架的搭建
    5999卖999!是噱头还是颠覆
  • 原文地址:https://www.cnblogs.com/fengbohello/p/4112385.html
Copyright © 2020-2023  润新知