1. 程式人生 > >STL中list實現降序排列

STL中list實現降序排列

       STL list可以對基本資料、字串直接呼叫sort()函式預設做升序排列,但是對於降序排列或者對非基本資料型別排序(物件、陣列等)需要藉助operator()函式實現,這點和Java中的List很相似。
具體呼叫函式:
list.sort(Cmpare());

其中Cmpare是一個類或結構體,成員函式operator()必須是公共型別的。

我舉一個簡單的例子(對學生按年齡降序排列)

  1. #ifndef _STUDENT_H_
  2. #define _STUDENT_H_
  3. #include <string>
  4. usingnamespace std;  
  5. class
     Student   
  6. {  
  7. private:  
  8.     int age;  
  9.     string name;  
  10. public:  
  11.     void setAge(int age);  
  12.     void setName(string name);  
  13.     int getAge() const;   
  14.     string getName() const;  
  15. };  
  16. #endif
  17. #include "Student.h"
  18. void Student::setAge(int age)  
  19. {  
  20.     this->age = age;  
  21. }  
  22. void Student::setName(string name)   
  23. {  
  24.     this->name = name;  
  25. }  
  26. int Student::getAge() const
  27. {  
  28.     returnthis->age;  
  29. }  
  30. string Student::getName() const
  31. {  
  32.     returnthis->name;  
  33. }  
  34. #ifndef _CMPARE_H_
  35. #define _CMPARE_H_
  36. #include "Student.h"
  37. class Cmpare  
  38. {  
  39. public:  
  40.     bool operator()(const Student st1,const Student  st2) 
    const;  
  41. };  
  42. #endif
  43. #include "Cmpare.h"
  44. bool Cmpare::operator()(const Student st1,const Student  st2) const
  45. {  
  46.     return st1.getAge() > st2.getAge();     
  47. }  
  48. #include "stdafx.h"
  49. #include <stdlib.h>
  50. #include <list>
  51. #include <iostream>
  52. #include "Cmpare.h"
  53. usingnamespace std;  
  54. int _tmain(int argc, _TCHAR* argv[])  
  55. {  
  56.     Student stu1;  
  57.     stu1.setAge(20);  
  58.     stu1.setName("stu1");  
  59.     Student stu2;  
  60.     stu2.setAge(18);  
  61.     stu2.setName("stu2");  
  62.     Student stu3;  
  63.     stu3.setAge(17);  
  64.     stu3.setName("stu3");  
  65.     Student stu4;  
  66.     stu4.setAge(22);  
  67.     stu4.setName("stu4");  
  68.     list<Student> stuList;  
  69.     stuList.push_back(stu1);  
  70.     stuList.push_back(stu2);  
  71.     stuList.push_back(stu3);  
  72.     stuList.push_back(stu4);  
  73.    stuList.sort(Cmpare());  
  74.    list<Student>::iterator stuIter = stuList.begin();  
  75.    for( ; stuIter != stuList.end() ; stuIter ++)   
  76.    {  
  77.        cout<<"name:"<<(*stuIter).getName() <<",age:"<<(*stuIter).getAge()<<endl;  
  78.    }  
  79.    return 0;  
  80. }  

執行結果:
name:stu4,age:22
     name:stu1,age:20
     name:stu2,age:18
     name:stu3,age:17