下面这个就是把结构体中内置的operator单独拿出来,作为比较器实现的方式。
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 ScoreStruct 15 { 16 string name; 17 unsigned int gold; 18 unsigned int silver; 19 unsigned int bronze; 20 }; 21 22 /* 把结构体中内置的operator单独拿出来,作为比较器实现*/ 23 bool comparatorScoreStruct(const ScoreStruct &ss1, const ScoreStruct &ss2) 24 { 25 int temp = ss1.name.compare(ss2.name); 26 if(ss1.gold != ss2.gold)//首先按照金银铜牌数降序,如果都相等,则按照姓名升序 27 { 28 return ss1.gold > ss2.gold; 29 } 30 31 if(ss1.silver != ss2.silver) 32 { 33 return ss1.silver > ss2.silver; 34 } 35 36 if(ss1.bronze != ss2.bronze) 37 { 38 return ss1.bronze > ss2.bronze; 39 } 40 41 if(temp <0) 42 { 43 return 1; 44 } 45 return 0;//无论如何,要保证最后要有一个return的 46 } 47 48 string strs[4] = { "tencent", "google","alibaba", "facebook"}; 49 50 void initVector(vector<ScoreStruct> &vec, unsigned int size) 51 { 52 srand(unsigned(time(NULL))); 53 for(unsigned int i =0; i < size; i++) 54 { 55 //char buff[32] = {0}; 56 int goldCount = 6; 57 int silverCount = 6; 58 int bronzeCount = 6; 59 //sprintf(buff, "%d", chineseScore); 60 ScoreStruct ss = {strs[i], goldCount, silverCount, bronzeCount}; 61 /* 62 ScoreStruct ss = {"0", 0}; 63 strcpy(ss.name, buff); 64 ss.score = randNum; 65 */ 66 vec.push_back(ss); 67 } 68 } 69 70 void printVector(vector<ScoreStruct> vec) 71 { 72 vector<ScoreStruct>::iterator it = vec.begin(); 73 for(; it != vec.end();++it) 74 { 75 cout << it->name << "," << it->gold << "," << it->silver << "," << it->bronze << " "; 76 } 77 cout<<endl; 78 } 79 80 int _tmain(int argc, _TCHAR* argv[]) 81 { 82 vector<ScoreStruct> vect; 83 initVector(vect, 4); 84 cout<<"before sort"<<endl; 85 printVector(vect); 86 sort(vect.begin(), vect.end(), comparatorScoreStruct);//与上个例子不同的是,多了一个比较器参数 87 cout<<"after sort"<<endl; 88 printVector(vect); 89 return 0; 90 }
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