Practice3_5_vector_sort_struct_gold_silver_bronze_playerName1
来源:互联网 发布:英雄联盟17173数据库 编辑:程序博客网 时间:2024/06/06 14:01
Practice3_5_vector_sort_struct_gold_silver_bronze_playerName1
本例中实现了金银铜奖牌数降序排序,若两个运动员金银铜的奖牌数都相同,则按照运动员的姓名升序排序。
其中,关于结构体中的operator,这是其中一种写法;看到有同事ysf用了另外一种方法,看起来也比较清晰,下一个版本实现。
注意:这里说的两种写法,都是在结构体中使用“bool operator <(const ScoreStruct &right) const”实现的,其实也可以单独拿出来,写一个比较器函数,作为sort()函数的第三个参数。再下下个版本实现。
1 // Practice3_vector_sort_struct.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <vector> 6 #include <algorithm> 7 #include <iostream> 8 #include <ctime> 9 #include <stdio.h>10 #include <string>11 12 using namespace std;13 14 struct ScoreStruct15 {16 string name; 17 unsigned int gold;18 unsigned int silver;19 unsigned int bronze;20 bool operator <(const ScoreStruct &right) const21 {22 int temp = name.compare(right.name);23 if(gold != right.gold)//首先按照金银铜牌数降序,如果都相等,则按照姓名升序24 {25 return gold > right.gold;26 }27 else28 {29 if(silver != right.silver)30 {31 return silver > right.silver;32 }33 else34 {35 if(bronze != right.bronze)36 {37 return bronze > right.bronze;38 }39 else if(temp < 0)40 {41 return 1;42 }43 }44 }45 return 0;//无论如何,要保证最后要有一个return的46 }47 };48 49 string strs[4] = { "tencent", "google","alibaba", "facebook"};50 51 void initVector(vector<ScoreStruct> &vec, unsigned int size)52 {53 srand(unsigned(time(NULL)));54 for(unsigned int i =0; i < size; i++)55 {56 //char buff[32] = {0};57 int goldCount = rand()%100;58 int silverCount = rand()%100;59 int bronzeCount = rand()%100;60 //sprintf(buff, "%d", chineseScore);61 ScoreStruct ss = {strs[i], goldCount, silverCount, bronzeCount};62 /*63 ScoreStruct ss = {"0", 0};64 strcpy(ss.name, buff);65 ss.score = randNum;66 */67 vec.push_back(ss);68 }69 }70 71 void printVector(vector<ScoreStruct> vec)72 {73 vector<ScoreStruct>::iterator it = vec.begin();74 for(; it != vec.end();++it)75 {76 cout << it->name << "," << it->gold << "," << it->silver << "," << it->bronze << " ";77 }78 cout<<endl;79 }80 81 int _tmain(int argc, _TCHAR* argv[])82 {83 vector<ScoreStruct> vect;84 initVector(vect, 4);85 cout<<"before sort"<<endl;86 printVector(vect);87 sort(vect.begin(), vect.end());88 cout<<"after sort"<<endl;89 printVector(vect);90 return 0;91 }
运行结果示例1(这个结果很好,恰好随机到有两名player金牌数相同,则按照银牌排序):
before sort
tencent,93,65,21 google,93,41,86 alibaba,77,88,35 facebook,81,87,25
after sort
tencent,93,65,21
google,93,41,86
facebook,81,87,25
alibaba,77,88,35
运行结果示例2(这个例子故意把金银铜数量设置为相同,结果表明很好滴实现了需求):
before sort
tencent,6,6,6 google,6,6,6 alibaba,6,6,6 facebook,6,6,6
after sort
alibaba,6,6,6 facebook,6,6,6 google,6,6,6 tencent,6,6,6
0 0
- Practice3_5_vector_sort_struct_gold_silver_bronze_playerName1
- mongoose:嵌入式Web服务器
- jdk1.7下载地址
- 768E Game of Stones[Nim游戏][博弈]
- 画布项目
- 530. Minimum Absolute Difference in BST
- Practice3_5_vector_sort_struct_gold_silver_bronze_playerName1
- ArchLinux 简单安装步骤总结
- 约瑟夫环问题
- Struts2的下载功能
- 51nod:1181 质数中的质数(质数筛法)
- AJAX+PHP实现图片异步上传的实例详解
- 构造函数
- python matplotlib 编码问题
- TensorFlow 官方文档中文版解读之2——tf.sparse_to_dense的用法