std::sort 的使用
注:本文内容摘自网络,准确性有待验证,现阶段仅供学习参考。尊重作品作者成果,原文链接 :http://blog.163.com/xuezhongfei2000/blog/static/4716759920101163185943/
sort原型:
#include <algorithm> void sort( random_iterator start, random_iterator end ); void sort( random_iterator start, random_iterator end, StrictWeakOrdering cmp );
sort()的算法将序列[start, end)按升序排序,如果有相等元素, 不保证它们都将参与排序。如果严格弱排序函数对象cmp被指定, 它将用于代替“<“操作符比较元素。
与sort()算法相近的是introsort算法. sort()以O(Nlog(N))时间复杂度(平均情况和最坏情况下)优于O(n^2)但逊于线性时间(linear time).
记住, sort()只有使用随机访问迭代器才能工作. 因此你不能将sort()应用于(链表实现的)list; 你应该使用专为list实现的sort。
例如, 下面的代码将一个整数vector按升序排序:
vector<int> v; v.push_back( 23 ); v.push_back( -1 ); v.push_back( 9999 ); v.push_back( 0 ); v.push_back( 4 ); cout << "Before sorting: "; for( unsigned int i = 0; i < v.size(); i++ ) { cout << v[i] << " "; } cout << endl; sort( v.begin(), v.end() ); cout << "After sorting: "; for( unsigned int i = 0; i < v.size(); i++ ) { cout << v[i] << " "; } cout << endl; 运行后, 将显示如下输出: Before sorting: 23 -1 9999 0 4 After sorting: -1 0 4 23 9999
同样的, 下面的代码使用sort()对一个标准整数数组排序, 产生的输出和上面的例子一样:
int array[] = { 23, -1, 9999, 0, 4 }; unsigned int array_size = 5; cout << "Before sorting: "; for( unsigned int i = 0; i < array_size; i++ ) { cout << array[i] << " "; } cout << endl; sort( array, array + array_size ); cout << "After sorting: "; for( unsigned int i = 0; i < array_size; i++ ) { cout << array[i] << " "; } cout << endl;
下面的例子展示了如何将自定义的比较函数搭配sort()使用. 函数cmp实现与<操作符相反的功能
. 当sort()以cmp用作比较函数后
, 结果序列是降序排列的, 相当于升序排序一样:
bool cmp( int a, int b ) { return a > b; } ... vector<int> v; for( int i = 0; i < 10; i++ ) { v.push_back(i); } cout << "Before: "; for( int i = 0; i < 10; i++ ) { cout << v[i] << " "; } cout << endl; sort( v.begin(), v.end(), cmp ); cout << "After: "; for( int i = 0; i < 10; i++ ) { cout << v[i] << " "; } cout << endl;
cocos2dx 3.0中TableView中源代码参考:
/**
*功能:将容器_cellUsed中序列[begin,end]按元素中Index属性升序排序
*/
std::sort(_cellsUsed.begin(), _cellsUsed.end(), [](TableViewCell *a, TableViewCell *b) -> bool{ return a->getIdx() < b->getIdx(); })