使用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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值