1 #include <iostream>
2 #include <vector>
3 #include <string>
4 #include <algorithm>
5 using namespace std;
6
7 class Student
8 {
9 private:
10 int id; // 学号
11 string name; // 姓名
12 float eyesight; // 视力
13 float height; // 身高
14 float chinese; // 语文成绩
15 float english; // 英文成绩
16 float math; // 数学成绩
17 public:
18 Student(int id, string name, float eyesight, float height, float chinese, float english, float math)
19 {
20 this->id = id;
21 this->name = name;
22 this->eyesight = eyesight;
23 this->height = height;
24 this->chinese = chinese;
25 this->english = english;
26 this->math = math;
27 }
28
29 int get_id()
30 {
31 return id;
32 }
33
34 string get_name()
35 {
36 return name;
37 }
38
39 float get_eyesight()
40 {
41 return eyesight;
42 }
43
44 float get_height()
45 {
46 return height;
47 }
48
49 float get_chinese()
50 {
51 return chinese;
52 }
53
54 float get_english()
55 {
56 return english;
57 }
58
59 float get_math()
60 {
61 return math;
62 }
63 };
64
65 // 比较大小的函数(谓词)
66 bool comparer(Student& stu_a, Student& stu_b)
67 {
68 // 按eyesight升序 + height升序排列
69 if(stu_a.get_eyesight() != stu_b.get_eyesight())
70 return (stu_a.get_eyesight() < stu_b.get_eyesight());
71 else
72 return (stu_a.get_height() < stu_b.get_height());
73
74 // 按eyesight降序° + height降序排列
75 //if(stu_a.get_eyesight() != stu_b.get_eyesight())
76 // return (stu_a.get_eyesight() > stu_b.get_eyesight());
77 //else
78 // return (stu_a.get_height() > stu_b.get_height());
79
80 // 按eyesight升序 + height降序排列
81 //if(stu_a.get_eyesight() != stu_b.get_eyesight())
82 // return (stu_a.get_eyesight() < stu_b.get_eyesight());
83 //else
84 // return (stu_a.get_height() > stu_b.get_height());
85
86 // 按eyesight降序 + height升序排列
87 //if(stu_a.get_eyesight() != stu_b.get_eyesight())
88 // return (stu_a.get_eyesight() > stu_b.get_eyesight());
89 //else
90 // return (stu_a.get_height() < stu_b.get_height());
91 }
92
93 int main(int argc, char** argv)
94 {
95 vector<Student> vec;
96 vec.push_back(Student(4, "Dudley", 1.1f, 170.2f, 90.5f, 89.5f, 93.0));
97 vec.push_back(Student(3, "Chris", 1.1f, 163.4f, 93.5f, 90.0f, 83.5f));
98 vec.push_back(Student(2, "Bob", 1.5f, 166.6f, 86.0f, 98.5f, 85.0f));
99 vec.push_back(Student(1, "Andrew", 1.5f, 173.2f, 98.5f, 100.0f, 100.f));
100
101 // 调用STL中的sort函数,其中的第三个参数就是我们前面定义的,比较两个Student对象大小的函数
102 sort(vec.begin(), vec.end(), comparer);
103
104 vector<Student>::iterator iter;
105 for(iter = vec.begin(); iter != vec.end(); ++iter)
106 {
107 cout << (*iter).get_eyesight() << "\t" << (*iter).get_height() << endl;
108 }
109
110 return 0;
111 }