使用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\n", __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("\033[0;34m----------------sorted----------------\033[0m\n");
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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。