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(); })
posted on 2014-07-24 10:57  默枪KG  阅读(328)  评论(0编辑  收藏  举报