C++ STL 之 deque容器 打分案例(内含sort排序用法)

  1 #include <iostream>
  2 #include <vector>
  3 #include <time.h>
  4 #include <deque>
  5 #include <algorithm>
  6 using namespace std;
  7 
  8 // 评委打分案例(sort 算法排序)
  9 // 创建 5 个选手(姓名,得分) , 10 个评委对 5 个选手进行打分
 10 // 得分规则:去除最高分,去除最低分,取出平均分
 11 // 按得分对 5 名选手进行排名
 12 
 13 // 选手类
 14 class Player
 15 {
 16 public:
 17     Player(){}
 18     Player(string name, int score) :mName(name), mScore(score){}
 19 public:
 20     string mName;
 21     int mScore;
 22 };
 23 
 24 // 创建选手
 25 void CreatePlayer(vector<Player>& v)
 26 {
 27     string nameSeed = "ABCDE";
 28     for (int i = 0; i < 5; i++)
 29     {
 30         Player p;
 31         p.mName = "选手";
 32         p.mName += nameSeed.at(i);
 33         p.mScore = 0;
 34         v.push_back(p);
 35     }
 36 }
 37 
 38 // 下面for_each函数的回调函数
 39 void PrintScore(int val)
 40 {
 41     cout << val << " ";
 42 }
 43 
 44 // 打分
 45 void SetScore(vector<Player>& p)
 46 {
 47     srand(time(NULL));
 48     for (vector<Player>::iterator it = p.begin(); it != p.end(); it++)
 49     {
 50         // 给当前学生进行打分
 51         deque<int> dScore;
 52         for (int i = 0; i < 10; i++)
 53         {
 54             int score = rand() % 41 + 60;
 55             cout << score << " ";
 56             dScore.push_back(score);
 57         }
 58         cout << endl;
 59 
 60         // 对分数进行排序 默认从小到大
 61         sort(dScore.begin(), dScore.end());
 62         // 打印排序后的分数
 63         for_each(dScore.begin(), dScore.end(), PrintScore);
 64         cout << endl;
 65 
 66         // 去除最高分 去除最低分
 67         dScore.pop_back();
 68         dScore.pop_front();
 69         // 求平均分
 70         // 总分
 71         int totalScore = 0;
 72         for (deque<int>::iterator it = dScore.begin(); it != dScore.end(); it++)
 73         {
 74             totalScore += *(it);
 75         }
 76         // 平均分
 77         int avgScore = totalScore / dScore.size();
 78         // 保存分数
 79         (*it).mScore = avgScore;
 80         cout << "-------------------------" << endl;
 81     }
 82 
 83 }
 84 
 85 // 排序规则(下面sort函数的回调函数)
 86 bool myCompare(Player& p1, Player& p2)
 87 {
 88     return p1.mScore > p2.mScore;
 89 }
 90 
 91 // 根据选手分数排名 sort默认从小到大排序 希望是从大到小排序
 92 void Print_Rank(vector<Player> v)
 93 {
 94     // 排序
 95     sort(v.begin(), v.end(), myCompare);
 96     // 打印
 97     for (int i = 0; i < v.size(); i++)
 98     {
 99         cout << "姓名:" << v.at(i).mName.c_str() << "  得分:" << v.at(i).mScore << endl;
100     }
101 }
102 
103 int main()
104 {
105     vector<Player> p;
106     CreatePlayer(p);
107     SetScore(p);
108     Print_Rank(p);
109     getchar();
110     return 0;
111 }