STL 深入理解 sort 函数 和 严格弱序比较

本文介绍了STL中sort函数的使用、底层排序算法及其依赖的严格弱序比较原则。详细讲解了小于比较、严格弱序的概念,并探讨了为何排序和关联容器需要遵循严格弱序,以及违反该原则可能导致的问题。此外,还讨论了严格弱序在实际应用中的场景。
摘要由CSDN通过智能技术生成

原来只会使用sort函数,却没有对它进行深入思考和探索。

下面我想通过几个近期我对它的一些疑问,来深入浅出的谈谈这个sort函数。

 

目录

1. 如何使用sort 函数?

2. sort函数使用的底层排序算法是什么?

3. 什么是严格弱序比较?

3.1【小于比较(LessThan comparable)】

3.2 【严格弱序(strict weak ordering)】

3.3 【严格弱序比较(strick weakly comparable)】

4. 为什么要严格弱序?

5. 什么样的算法必须满足严格弱序以及其应用?



 

1. 如何使用sort 函数?

头文件 include <algorithm>

下面是sort 函数的定义,有两种,一种是默认的sort函数,一种是加入自定义比较函数的sort函数。可以看出来,这两个函数都需要传入两个可以随机访问的迭代器,也就意味着,能够用sort函数排序的容器,需要支持随机访问(目前容器中就vector,deque支持随机访问)。迭代器first指向第一个需要排序的元素,last指向最后一个需要排序元素的下一个位置。排序范围 [first, last).

下面是sort函数的两种定义:

default (1)	
template <class RandomAccessIterator>
  void sort (RandomAccessIterator first, RandomAccessIterator last);

custom (2)	
template <class RandomAccessIterator, class Compare>
  void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

讲完迭代器,再讲讲比较函数或是泛函数,

(1)比较函数传入参数为两个值,对这两个值进行比较大小。

(2)仿函数(functors)在class(struct)中对小括号进行重载,里面两个数比较的方法。

它们都需要遵守【严格弱序比较(strict weakly comparable)】的原则(下面会具体讲)。返回值为bool类型。例如:

bool myfunction (int i,int j) { return (i<j); }

struct myclass {
  bool operator() (int i,int j) { return (i<j);}
} myobject;

 

2. sort函数使用的底层排序算法是什么?

快速排序

不稳定排序算法。

时间复杂度O(nlog(n)).

 

3. 什么是严格弱序比较?

严格弱序比较这个概念听起来就比较抽象,生涩难懂ÿ

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值