C++ sort 排序(降序、升序)使用总结
2017-03-25 14:36
696 查看
一、升序
C++ sort 函数十分方便,可以对内置类型也可对自定义类型进行快速排序,内置类型的使用比较简单,下面主要讨论自定义类型的排序,一般有如下几种使用方法:
1.1 重载比较操作符
比如,我们现有一批学生,要根据他们的成绩进行升序排序,成绩如果相等则根据名字升序排序,那么我们可以如下操作:[cpp] view
plain copy
struct Student{
string name;
int grade;
Student(string name, int grade) : name(name), grade(grade){}
bool operator < (const Student& rhs) const{
return grade < rhs.grade
|| (grade == rhs.grade && name < rhs.name);
}
friend void operator << (ostream& output, const Student& s){
output << s.name << " " << s.grade << endl;
}
};
[cpp] view
plain copy
int main()
{
vector<Student> vec;
vec.emplace_back("Jack", 20);
vec.emplace_back("John", 30);
vec.emplace_back("Amy", 20);
vec.emplace_back("Bill", 90);
cout << "Before:" << endl;
for(auto& s : vec){
cout << s;
}
sort(begin(vec),end(vec));
cout << endl << "After:" << endl;
for(auto& s : vec){
cout << s;
}
return 0;
}
1.2 比较函数
当然,我们也可以自己写比较函数,实现如下:[cpp] view
plain copy
bool cmp(const Student& lhs, const Student& rhs){
return lhs.grade < rhs.grade
|| (lhs.grade == rhs.grade && lhs.name < rhs.name);
}
按如下方式调用:
[cpp] view
plain copy
sort(begin(vec),end(vec), cmp);
1.3 函数对象
另外一种方式,即构造一个函数对象,抑或叫 functor,其实就是实现了重载 operator() 的一个类,代码如下:[cpp] view
plain copy
struct Compare{
bool operator()(const Student& lhs, const Student& rhs){
return lhs.grade < rhs.grade
|| (lhs.grade == rhs.grade && lhs.name < rhs.name);
}
};
按如下方式调用:
[cpp] view
plain copy
sort(begin(vec),end(vec), Compare());
1.4 Lambda
C++11有了 Lambda 之后,就不必再为某些小函数写具名函数了,如下使用即可:[cpp] view
plain copy
sort(begin(vec), end(vec), [](const Student& lhs, const Student& rhs) {
return lhs.grade < rhs.grade
|| (lhs.grade == rhs.grade && lhs.name < rhs.name); });
二、降序
降序排序的方法与升序类似,如果采用比较函数、Lambda 或者比较函数的方式,只需要改一改比较条件就OK了,但是,如果对于Student类,我们定义了 operator < 之后,不想为了降序排序再定义一个 operator > 怎么办?两种办法!
2.1 reverse
升序排序之后,用 reverse 反转即可。
2.2 反向迭代
直接按如下方式调用即可,不用再去重载 operator > [cpp] view
plain copy
sort(vec.rbegin(), vec.rend());
相关文章推荐
- C++ sort 排序(降序、升序)使用总结
- js:数组重排序问题:如何使用sort()方法按数值的大小进行升序或降序排列
- linux下使用sort命令升序、降序、随机及组合方式排序方法
- c/c++中排序的使用之—sort
- C++ 排序函数 sort(),qsort()的使用方法
- 实战c++中的vector系列--使用sort算法对vector<unique_ptr<string>>进行排序(sort函数“应输入 2 个参数,却提供了 3 个)
- C# List.sort排序详解(多权重,升序降序)
- 使用c++的 list.sort()进行排序
- C# List.sort排序详解(多权重,升序降序)
- 实战c++中的vector系列--使用sort算法对vector进行排序(对vector<string>排序、使用稳定的排序std::stable_sort())
- c++中的sort 排序函数 less和greater使用
- [C/C++标准库]_[初级]_[使用std::sort排序各种类型数据]
- C++ 排序函数 sort(),qsort()的使用方法
- C++ 排序函数 sort(),qsort()的使用方法
- sort()函数与升序、降序 C++
- 用sort()方法对数组的元素进行排序(可按字母升序降序与获得最大最小值)
- [C/C++标准库]_[初级]_[使用std::sort排序各种类型数据]
- c++中sort()及qsort()的使用方法总结
- C++ 排序函数 sort(),qsort()的使用方法
- 常见排序的原理和C++实现(一)——STL库中sort的使用方法