C++利用标准库对自定义数据排序
利用std::sort函数以及自定义compare类对数据排序
sort有两个类模板
template <class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
使用第二个类模板可以自定义排序
#include <algorithm>
#include <stdio.h>
#include <string>
#include <vector>
using namespace std;
class A
{
private:
int _num;
public:
A(int num) : _num(num) {}
virtual ~A() {}
int get_num() const
{
return _num;
}
};
enum Enumcomp
{
ASC,
DESC
};
class compare
{
private:
Enumcomp comp;
public:
compare(Enumcomp c) : comp(c){};
virtual ~compare() {}
bool operator()(A a1, A a2)
{
switch (comp)
{
case ASC:
return a1.get_num() < a2.get_num();
case DESC:
return a1.get_num() > a2.get_num();
}
}
};
int main()
{
A a1(2);
A a2(0);
A a3(8);
A a4(29);
A a5(4);
A a6(7);
A a7(20);
A a8(12);
vector<A> vec;
vec.push_back(a1);
vec.push_back(a2);
vec.push_back(a3);
vec.push_back(a4);
vec.push_back(a5);
vec.push_back(a6);
vec.push_back(a7);
vec.push_back(a8);
sort(vec.begin(), vec.end(), compare(ASC));
for (int i = 0; i < 8; i++)
{
printf("%d\n", vec[i].get_num());
}
return 0;
}