一、vector 、list 容器 int及string的升序及降序
1、vector.sort(vec.begin(), vec.end(), greater<int>()) 或者传入 my_greater 都可以
2、list.sort() 或 list.sort(my_greater) 或者greater<int>()
3、greater<string>() 也可以, function object 原型 greater<type>()
#include <functional>
#include <algorithm>
using namespace std;
template <typename T>
void print_ivec(T first, T last, const string str)
{
cout << str << ": ";
for (; first != last; ++first)
{
cout << *first << ' ';
}
cout << endl;
}
bool my_greater(int a, int b)
{
return a > b ? true : false;
}
int main(int argc, const char *argv[])
{
//int i;
vector<int>::size_type i;
vector<int> ivec;
for (i = 1; i <= 10; ++i)
{
ivec.push_back(i);
}
print_ivec(ivec.begin(), ivec.end(), "init ivec");
// vector容器升序
sort(ivec.begin(), ivec.end(), less<int>());
print_ivec(ivec.begin(), ivec.end(), "less ivec");
// vector容器降序
sort(ivec.begin(), ivec.end(), greater<int>());
print_ivec(ivec.begin(), ivec.end(), "greater ivec");
list<int> ilist;
ilist.push_back(6);
ilist.push_back(7);
ilist.push_back(3);
ilist.push_back(1);
print_ivec(ilist.begin(), ilist.end(), "init ilist");
// list 容器
// 法1
ilist.sort(); // 默认 升序
print_ivec(ilist.begin(), ilist.end(), "sort ilist");
// 法2
ilist.sort(my_greater); // 传入函数指针 自定义函数降序
//ilist.sort(greater<int>()); // 传入函数指针 function object
print_ivec(ilist.begin(), ilist.end(), "greater ilist");
#if 1
list<string> slist;
slist.push_back("nn");
slist.push_back("xx");
slist.push_back("oo");
slist.push_back("nn");
print_ivec(slist.begin(), slist.end(), "init slist");
#endif
slist.sort();
print_ivec(slist.begin(), slist.end(), "sort slist");
slist.sort(greater<string>());
print_ivec(slist.begin(), slist.end(), "greater slist");
slist.sort(less<string>());
print_ivec(slist.begin(), slist.end(), "less slist");
return 0;
}
二、class 的sort排序
1、需重写 operator < 、>
2、自定义比较函数my_greater、my_less
3、采用list.sort() 或 list.sort(my_greater)
#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <functional>
#include <algorithm>
using namespace std;
class stu
{
public:
stu(){}
stu(int a)
{
this->age = a;
}
bool operator < (stu b)
{
return this->age < b.age;
}
bool operator > (stu b)
{
return this->age > b.age;
}
public:
int age;
};
template <typename T>
void print_class(T first, T last, const string str)
{
cout << str << ": ";
for (; first != last; ++first)
{
cout << first->age << ' ';
}
cout << endl;
}
bool my_greater(stu a, stu b)
{
return a.age > b.age ? true : false;
}
bool my_less(stu a, stu b)
{
return a.age < b.age ? true : false;
}
int main(int argc, const char *argv[])
{
list<stu> u;
u.push_back(stu(1));
u.push_back(stu(8));
u.push_back(stu(5));
u.push_back(stu(7));
u.push_back(stu(2));
u.sort(); // 默认取 < , 升序
print_class(u.begin(), u.end(), "class sort");
//u.sort(greater<stu>()); // 报错, 需自定义函数
u.sort(my_greater);
print_class(u.begin(), u.end(), "class greater");
u.sort(my_less);
print_class(u.begin(), u.end(), "class less");
return 0;
}