c++中排序函数的基础入门使用教程

  

  

STL主要包含容器,迭代器,算法三块内容,用户可以对容器进行一系列的操作,比如遍历和计算,而STL提供的迭代器和容器完美地提供了这样的接口。其中std::向量是最常用的容器之一,向量是一个模板类,定义在命名空间名称空间下,使用向量需要在包含相关头文件。今天主要讲解对向量的排序的使用。

  

<强>排序类函数:

  

           函数名   功能描述         排序   对给定区间所有元素进行排序         stable_sort   对给定区间所有元素进行稳定排序         partial_sort   对给定区间所有元素部分排序         partial_sort_copy   对给定区间复制并排序         nth_element   找出给定区间的某个位置对应的元素         is_sorted   判断一个区间是否已经排好序         分区   使得符合某个条件的元素放在前面         stable_partition   相对稳定的使得符合某个条件的元素放在前面            

  

需要头文件& lt; algorithm>

  

语法描述:排序(cmp)开始、结束、cmp参数可以没有,如果没有默认非降序排序。

  

常见的排序算法有快速排序,冒泡排序,归并排序等.STL中排序函数的实现跟STL的版本有关,而往往那种函数是由多种排序算法混合而成的。

  

  

STL中排序函数的使用方法如下,默认对容器进行从小到大的排序。

        # include & lt; vector>//std::向量   # include & lt; algorithm>//std::      int main () {      std:: vectorvi {2 0 1 8 1、2、1, 5};   std::类(vi.begin (), vi.end ());//相当于std::类(vi.begin (), vi.end (), std:: less ());      for (int i=0;我& lt;vi.size ();+ + i) {   printf (" % d”、vi[我]);   }      printf (" \ n ");//输出:0 1 1 1 2 2 5 8      

当然也可以指定对容器进行从大到小的排序:

        # include & lt; vector>//std::向量   # include & lt; algorithm>//std::      int main () {      std:: vectorvi {2 0 1 8 1、2、1, 5};   std::类(vi.begin (), vi.end (), std:: greater ());      for (int i=0;我& lt;vi.size ();+ + i) {   printf (" % d”、vi[我]);   }      printf (" \ n ");//输出:8 5 2 2 1 1 1 0      

  

如果向量内的元素为用户自定义类型,并且用户想要按照自定义类型的某些组合特性进行排序。先来看看那种函数的定义:

        模板& lt;类RandomAccessIterator类Compare>   孔隙类型(RandomAccessIterator首先,RandomAccessIterator最后,比较comp);      

其中前两个参数为迭代器类型,第三个参数为比较函数。下面的例子中,类角色拥有两个属性,age_和name_,这里为了简单起见,变量均为公开。现在需要对一个元素类型为特征的向量进行按照性格的age_从小打到进行排序。

        类角色{   公众:   字符串字符(int n, s): age_ (n), name_ (s) {}   int age_;   字符串name_;   };      类比较{   公众:   bool运营商()(* ca,字符* cb) {   返回ca→age_ & lt;cb→age_;   }   };         int main () {   vector<字符*比;vc{新角色(1,“佐佐木”),新角色(2“nozomi”),新角色(1,“书包”),新角色(6“青田”)};      sort (vc.begin (), vc.end(),比较());      for (int i=0;我& lt;vc.size ();+ + i) {   printf (" % s ", vc[我]→name_.c_str ());   }      返回0;   }//输出:佐佐木书包nozomi青田      

对于排序的第三个函数,用户可以自己定义任何类型的比较方式,但是需要满足严格的弱序化的条件:

        X;   X b;      条件:测试结果   a等于b:比较(a, b)假比较(b, a)假      小于b比较(a, b)真比较(b, a)假      b是不到一个比较(a, b)假的比较(b, a)真正的      

上述例子中的比较函数基于性格对象的age_变量值进行比较,根据严格的弱序化的条件,对向量按照某种条件进行排序就比较好理解了。

  

对于向量的两个元素a, b,如果一个必须排在前b面,需要满足下面的条件:比较(a, b)=true,比较(b, a)=false;如果满足比较(a, b)=false,比较(b, a)=false,则说明两个元素是相等的;

c++中排序函数的基础入门使用教程