#include <iostream> #include <vector> #include <numeric> #include <algorithm> #include <string> using namespace std; #define N_K 100 struct Data_s{ int number; char name[20]; bool operator < (const Data_s &obj) const { return number < obj.number; } bool operator > (const Data_s &obj) const { return number > obj.number; } bool operator == (const Data_s &obj) const { return number == obj.number; } bool operator != (const Data_s &obj) const { return number != obj.number; } }; typedef struct Data_s Data_t; void makeData(Data_t *d) { int i; for (i=0;i<N_K;i++) { d[i].number = i; sprintf(d[i].name,"name %02d",i); } } bool greaterNumber(const Data_t& d1,const Data_t& d2) { return d1.number>d2.number; } template<typename T> struct display{ void operator()(const T &x)const { cout<<x.number<<" "<<x.name<<endl; } }; int main() { Data_t d[N_K]; vector<Data_t> dv; vector<Data_t>::iterator it; makeData(d); d[88].number = 0; strcpy(d[88].name,"aaaa"); for (int i=0;i<N_K;i++) { dv.push_back(d[i]); } sort(dv.begin(),dv.end()); //升序 使用重载运算符 < sort(dv.begin(),dv.end(),greaterNumber); //降序 使用自定义函数 greaterNumber it = unique(dv.begin(),dv.end()); for_each(dv.begin(),dv.end(),display<Data_t>()); return 0; }