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,则说明两个元素是相等的;