C++ 类排序总结

来源:互联网 发布:杨辉三角java代码 编辑:程序博客网 时间:2024/05/01 11:56

对C++的自定义类进行排序的形式有:类数组,vector,优先级队列

而用于比较的函数一般有function object和function

总结起来如下:

#include<iostream>#include<algorithm>#include<queue>#include<vector>using namespace std;class num{public:int first;int second;num(){}void set(int a,int b){first = a;second = b;}};class Cmp_Class{public:bool operator()(num a,num b){return a.first < b.first;}};bool operator<(const num &a,const num &b){return a.first < b.first;}bool compare_function(const num &a,const num &b){return a.first < b.first;}Cmp_Class cmp_object;int main(){//arraynum a[4];a[0].set(100,2);a[1].set(2,1);a[2].set(6,9);a[3].set(0,-1);sort(a,a + 4);for(int i = 0 ; i < 4 ; i ++)cout << a[i].first << " " << a[i].second << endl;cout << endl;a[0].set(100,2);a[1].set(2,1);a[2].set(6,9);a[3].set(0,-1);sort(a,a + 4,compare_function);for(int i = 0 ; i < 4 ; i ++)cout << a[i].first << " " << a[i].second << endl;cout << endl;a[0].set(100,2);a[1].set(2,1);a[2].set(6,9);a[3].set(0,-1);sort(a,a + 4,cmp_object);for(int i = 0 ; i < 4 ; i ++)cout << a[i].first << " " << a[i].second << endl;cout << endl;//vectorvector<num> v;a[0].set(100,2);a[1].set(2,1);a[2].set(6,9);a[3].set(0,-1);v.clear();for(int i = 0 ; i < 4 ; i ++){v.push_back(a[i]);}sort(v.begin(),v.end());for(int i = 0 ; i < 4 ; i ++)cout << v[i].first << " " << v[i].second << endl;cout << endl;a[0].set(100,2);a[1].set(2,1);a[2].set(6,9);a[3].set(0,-1);v.clear();for(int i = 0 ; i < 4 ; i ++){v.push_back(a[i]);}sort(v.begin(),v.end(),compare_function);for(int i = 0 ; i < 4 ; i ++)cout << v[i].first << " " << v[i].second << endl;cout << endl;a[0].set(100,2);a[1].set(2,1);a[2].set(6,9);a[3].set(0,-1);v.clear();for(int i = 0 ; i < 4 ; i ++){v.push_back(a[i]);}sort(v.begin(),v.end(),cmp_object);for(int i = 0 ; i < 4 ; i ++)cout << v[i].first << " " << v[i].second << endl;cout << endl;//priority_queuepriority_queue<num,vector<num>,Cmp_Class> p;a[0].set(100,2);a[1].set(2,1);a[2].set(6,9);a[3].set(0,-1);for(int i = 0 ; i < 4 ; i ++){p.push(a[i]);}while(!p.empty()){num t = p.top();cout << t.first << " " << t.second << endl;p.pop();}return 0;}


原创粉丝点击