STL Sort算法
来源:互联网 发布:c经典排序算法 编辑:程序博客网 时间:2024/05/16 09:03
其实首先是转载的:
STL提供的Sort 算法
C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点。STL 排序算法同样需要保持高效。因此,对于不同的需求,STL提供的不同的函数,不同的函数,实现的算法又不尽相同。
1.1 所有sort算法介绍
所有的sort算法的参数都需要输入一个范围,[begin, end)。这里使用的迭代器(iterator)都需是随机迭代器(RadomAccessIterator), 也就是说可以随机访问的迭代器,如:it+n什么的。(partition和stable_partition 除外)
如果你需要自己定义比较函数,你可以把你定义好的仿函数(functor)作为参数传入。每种算法都支持传入比较函数。以下是所有STL sort算法函数的名字列表:
功能描述
sort
对给定区间所有元素进行排序
stable_sort
对给定区间所有元素进行稳定排序
partial_sort
对给定区间所有元素部分排序
partial_sort_copy
对给定区间复制并排序
nth_element
找出给定区间的某个位置对应的元素
is_sorted
判断一个区间是否已经排好序
partition
使得符合某个条件的元素放在前面
stable_partition
相对稳定的使得符合某个条件的元素放在前面
其中nth_element 是最不易理解的,实际上,这个函数是用来找出第几个。例如:找出包含7个元素的数组中排在中间那个数的值,此时,我可能不关心前面,也不关心后面,我只关心排在第四位的元素值是多少。1.2 sort 中的比较函数
当你需要按照某种特定方式进行排序时,你需要给sort指定比较函数,否则程序会自动提供给你一个比较函数。
vector < int > vect;
//...
sort(vect.begin(), vect.end());
//此时相当于调用
sort(vect.begin(), vect.end(), less<int>() );
上述例子中系统自己为sort提供了less仿函数。在STL中还提供了其他仿函数,以下是仿函数列表:
功能描述
equal_to
相等
not_equal_to
不相等
less
小于
greater
大于
less_equal
小于等于
greater_equal
大于等于
需要注意的是,这些函数不是都能适用于你的sort算法,如何选择,决定于你的应用。另外,不能直接写入仿函数的名字,而是要写其重载的()函数:
less<int>()
greater<int>()
当你的容器中元素时一些标准类型(int float char)或者string时,你可以直接使用这些函数模板。但如果你时自己定义的类型或者你需要按照其他方式排序,你可以有两种方法来达到效果:一种是自己写比较函数。另一种是重载类型的'<'操作赋。
#include <iostream>#include <algorithm>#include <functional>#include <vector>using namespace std; class myclass { public: myclass(int a, int b):first(a), second(b){} int first; int second; bool operator < (const myclass &m)const { return first < m.first; }}; bool less_second(const myclass & m1, const myclass & m2) { return m1.second < m2.second;} int main() { vector< myclass > vect; for(int i = 0 ; i < 10 ; i ++){ myclass my(10-i, i*3); vect.push_back(my); } for(int i = 0 ; i < vect.size(); i ++) cout<<"("<<vect[i].first<<","<<vect[i].second<<")\n"; sort(vect.begin(), vect.end()); cout<<"after sorted by first:"<<endl; for(int i = 0 ; i < vect.size(); i ++) cout<<"("<<vect[i].first<<","<<vect[i].second<<")\n"; cout<<"after sorted by second:"<<endl; sort(vect.begin(), vect.end(), less_second); for(int i = 0 ; i < vect.size(); i ++) cout<<"("<<vect[i].first<<","<<vect[i].second<<")\n"; return 0 ;}
接下来这部分是我原创的,我自己写了一个小小的程序,用以学习sort
#include<iostream>#include<vector>#include<functional>#include<algorithm>using namespace std;bool less_second(const int& a, const int &b) {return a < b;}bool greater_second(const int& a, const int &b) {return a > b;}int main() {vector<int> a(10);for(int i = 0; i < 10; i++) a[i] = 10 - i;for(int i = 0; i < 10; i++) cout<<a[i]<<" ";cout<<endl;sort(a.begin(), a.end(), less_second);for(int i = 0; i < 10; i++) cout<<a[i]<<" ";cout<<endl;sort(a.begin(), a.end(), greater_second);for(int i = 0; i < 10; i++) cout<<a[i]<<" ";return 0;}
发现STL真的非常非常好用, Algorithm非常漂亮
- STL Sort算法
- STL - sort排序算法
- STL中的Sort 算法
- STL算法之sort
- 【STL】算法 — sort
- STL算法-sort
- STL list::sort算法
- STL源码:算法sort
- STL中的Sort算法
- STL的sort算法
- stl sort算法之研究
- stl sort算法之研究
- SGI STL: list::sort()算法
- STL中Sort算法介绍
- 【STL源码剖析】Sort算法
- C++ STL 自定义sort算法
- STL所有sort算法介绍
- STL排序算法之sort()
- MVC3中Action间传值
- SBJson (aka json-framework)
- BlueLab修改库文件方法
- JSON介绍
- android 画面横屏竖屏设置
- STL Sort算法
- 谓词使用
- 搜索引擎算法变化对于SEO的影响
- java设计模式--单例模式应用--02
- Naxsi is an open source, high performance, low rules maintenance, Web Application Firewall module fo
- js与浏览器的兼容Compatibility
- ubuntu10.04下JDK的安装及配置
- jquery 小记
- JAVA NIO 简介