1028. List Sorting (25)
距离PAT考试还有18天最重要的是做透每一题
这一题比较简单
不过也有学到的东西
一个是sort的第三个参数 可以是 一个函数指针也可以是一个函数对象 代码来自网络
// sort algorithm example #include <iostream> // std::cout #include <algorithm> // std::sort #include <vector> // std::vector bool myfunction (int i,int j) { return (i<j); } struct myclass { bool operator() (int i,int j) { return (i<j);} } myobject; int main () { int myints[] = {32,71,12,45,26,80,53,33}; std::vector<int> myvector (myints, myints+8); // 32 71 12 45 26 80 53 33 // using default comparison (operator <): std::sort (myvector.begin(), myvector.begin()+4); //(12 32 45 71)26 80 53 33 // using function as comp std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80) // using object as comp std::sort (myvector.begin(), myvector.end(), myobject); //(12 26 32 33 45 53 71 80) // print out content: std::cout << "myvector contains:"; for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; }
另一个是strcmp函数 比较两个c字符串的函数当两个字符串相等时就返回0第一个较小时(比较ASCII)返回值小于0
思路:
用结构体存储得到的元素
并用sort函数排序重点是cmp函数的编写
#include <cstdio> #include <vector> #include <algorithm> #include <cstring> using namespace std; int n,c; struct Re{ int id; char name[10]; int grade; Re(){ id =0; for(int i=0;i<10;i++) name[i]='\0'; grade=0; } }; vector<Re> rv; bool cmp1(Re r1,Re r2) { return r1.id<r2.id; } bool cmp2(Re r1,Re r2) { if(strcmp(r1.name,r2.name) < 0){ return true; } else if(strcmp(r1.name,r2.name) == 0) { return r1.id < r2.id; } return false; } bool cmp3(Re r1,Re r2) { if(r1.grade == r2.grade) { return r1.id < r2.id; } return r1.grade<r2.grade; } int main() { scanf("%d %d",&n,&c); for(int i =0;i<n;i++) { Re re; scanf("%d",&(re.id)); scanf("%s",&(re.name[0])); scanf("%d",&(re.grade)); rv.push_back(re); } switch (c) { case 1: sort(rv.begin(),rv.end(),cmp1); break; case 2: sort(rv.begin(),rv.end(),cmp2); break; case 3: sort(rv.begin(),rv.end(),cmp3); break; } for(int i=0;i<rv.size();i++){ printf("%06d %s %d\n",rv[i].id,rv[i].name,rv[i].grade); } return 0; }
Yosoro