编程常用STL算法使用(持续更新)

1、C++ sort()排序函数

位于<algorithm>头文件中

sort (first, last)对容器或普通数组中 [first, last) 范围内的元素进行排序,默认进行升序排序。

该函数专门用来对容器或普通数组中指定范围内的元素进行排序,排序规则默认以元素值的大小做升序排序,除此之外我们也可以选择标准库提供的其它排序规则(比如std::greater<T>降序排序规则),甚至还可以自定义排序规则。 

sort() 函数受到底层实现方式的限制,它仅适用于普通数组和部分类型的容器。换句话说,只有普通数组和具备以下条件的容器,才能使用 sort() 函数:

  1. 容器支持的迭代器类型必须为随机访问迭代器。这意味着,sort() 只对 array、vector、deque 这 3 个容器提供支持
  2. 如果对容器中指定区域的元素做默认升序排序,则元素类型必须支持<小于运算符;同样,如果选用标准库提供的其它排序规则,元素类型也必须支持该规则底层实现所用的比较运算符;
  3. sort() 函数在实现排序时,需要交换容器中元素的存储位置。这种情况下,如果容器中存储的是自定义的类对象,则该类的内部必须提供移动构造函数和移动赋值运算符。

sort() 函数有 2 种用法,其语法格式分别为:

//对 [first, last) 区域内的元素做默认的升序排序
void sort (RandomAccessIterator first, RandomAccessIterator last);
//按照指定的 comp 排序规则,对 [first, last) 区域内的元素进行排序
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

其中,first 和 last 都为随机访问迭代器,它们的组合 [first, last) 用来指定要排序的目标区域;另外在第 2 种格式中,comp 可以是 C++ STL 标准库提供的排序规则(比如 std::greater<T>),也可以是自定义的排序规则 

对于排序规则:

(1)、C++ STL 标准库提供的排序规则

less<数据类型>()//从小到大排序

greater<数据类型>()//从大到小排序

(2)自定义函数:返回值是bool型

 #include<iostream>
 #include<algorithm>
 #include"cstring"
 using namespace std;
 typedef struct student{
  char name[20];
  int math;
  int english;
 }Student;
 bool cmp(Student a,Student b);
 main(){
   //先按math从小到大排序,math相等,按english从大到小排序 
   Student a[4]={{"apple",67,89},{"limei",90,56},{"apple",90,99}};
   sort(a,a+3,cmp);
   for(int i=0;i<3;i++)    
   cout<<a[i].name <<" "<<a[i].math <<" "<<a[i].english <<endl;     
 }
 bool cmp(Student a,Student b){
   if(a.math >b.math )
   return a.math <b.math ;//按math从小到大排序 
   else if(a.math ==b.math )
       return a.english>b.english ; //math相等,按endlish从大到小排序23 
}

2、find() 函数

find() 函数本质上是一个模板函数,用于在指定范围内查找和目标元素值相等的第一个元素。

头文件:algorithm 

语法格式

InputIterator find (InputIterator first, InputIterator last, const T& val);

其中,first 和 last 为输入迭代器,[first, last) 用于指定该函数的查找范围;val 为要查找的目标元素。

适用对象:普通数组、所有的序列式容器

返回值:返回一个输入迭代器,当 find() 函数查找成功时,其指向的是在 [first, last) 区域内查找到的第一个目标元素;如果查找失败,则该迭代器的指向和 last 相同。

注意:

find() 函数的底层实现,其实就是用==运算符将 val 和 [first, last) 区域内的元素逐个进行比对。这也就意味着,[first, last) 区域内的元素必须支持==运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值