排序算法是STL算法中相当常用的一个类别,包括部分排序和全部排序算法,依据效率和应用场景进行选择。

明细:

sort

函数原型:
template <class RandomAccessIterator>
 void sort (RandomAccessIterator first, RandomAccessIterator last);
template <class RandomAccessIterator, class Compare>
 void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
函数作用:
第一个重载函数就是从小到大的顺序排序。
第二个重载函数的comp是接受两个参数的函数指针或者函数对象,函数对象是行为类似函数的对象,可以通过comp定义排序方式。
函数使用:
comp不应该改变传入参数,否则结果未知
stable_sort
函数原型:
template <class RandomAccessIterator>
 void stable_sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
 void stable_sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
函数作用:
基于sort功能,如果两个元素相等,则保留他们排序之前的序列。
partial_sort
函数原型:
template <class RandomAccessIterator>
 void partial_sort (RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last);
template <class RandomAccessIterator, class Compare>
 void partial_sort (RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp);
函数作用:
对[first,last)区间的元素部分排序,比*middle小的元素按照升序排列在前面,比*middle大的元素不做排序复制到区间的后半部分。
第一个重载用操作符’<’进行比较,第二个重载用comp进行比较。
partial_sort_copy
函数原型:
template <class InputIterator, class RandomAccessIterator>
 RandomAccessIterator
   partial_sort_copy (InputIterator first,InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last);
template <class InputIterator, class RandomAccessIterator, class Compare>
 RandomAccessIterator
   partial_sort_copy (InputIterator first,InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp);
函数作用:
将[first,last)区间的最小的元素拷贝至result_first-result_last的区间。
第一个重载用操作符’<’进行比较,第二个重载用comp进行比较。
函数使用:
result_first和result_last需要事先指定。
is_sorted
函数原型:
template <class ForwardIterator>
 bool is_sorted (ForwardIterator first, ForwardIterator last);
template <class ForwardIterator, class Compare>
 bool is_sorted (ForwardIterator first, ForwardIterator last, Compare comp);
函数作用:
如果区间元素按照升序进行排列,就返回true,否则返回false。
第一个重载版本用操作符’<’进行比较,第二个重载版本用comp(通过自定义的comp可以实现降序排列返回true)进行比较。
is_sorted_until
函数原型:
template <class ForwardIterator>
 ForwardIterator is_sorted_until (ForwardIterator first, ForwardIterator last);
template <class ForwardIterator>
 ForwardIterator is_sorted_until (ForwardIterator first, ForwardIterator last, Compare comp);
函数作用:
返回一个迭代器,该迭代器指向第一个没有按照升序排列的元素。
第一个重载版本用操作符’<’进行比较,第二个重载版本用comp(通过自定义的comp可以实现降序排列返回true)进行比较。
nth_element
函数原型:
template <class RandomAccessIterator>
 void nth_element (RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last);
template <class RandomAccessIterator, class Compare>
 void nth_element (RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp);
函数作用:
部分排序函数,排序后的序列具有以下特点:
1. nth位置上的元素必定是按照序列应该在那里的元素,即升序(默认)的第n个元素。
2. nth之前的元素都不大于nth位置的元素,nth之后的元素都不小于nth位置的元素。
重载函数参见其他的排序函数,默认是升序排列,可以指定自己的排序规则。

【STL源码学习】STL算法学习之四的更多相关文章

  1. STL源码剖析:算法

    启 算法,问题之解法也 算法好坏的衡量标准:时间和空间,单位是对数.一次.二次.三次等 算法中处理的数据,输入方式都是左闭又开,类型就迭代器, 如:[first, last) STL中提供了很多算法, ...

  2. STL源码剖析之组件

    本篇文章开始,进行STL源码剖析的一些知识点,后续系列笔记全是参照<STL源码剖析>进行学习记录的 STL在现在的大部分项目中,实用性已经没有Boost库好了,毕竟STL中仅仅提供了一些容 ...

  3. 【STL源码学习】STL算法学习之二

    第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, cla ...

  4. 《STL源码剖析》学习之traits编程

    侯捷老师在<STL源码剖析>中说到:了解traits编程技术,就像获得“芝麻开门”的口诀一样,从此得以一窥STL源码的奥秘.如此一说,其重要性就不言而喻了.      之前已经介绍过迭代器 ...

  5. stl源码学习(版本2.91)--list

    stl源码学习(版本2.91)--list 一,阅读list()构造函数的收获 1,默认构造函数的作用和被调用的时机 struct no{ no(int i){} //no(){ // std::co ...

  6. c++ stl源码剖析学习笔记(一)uninitialized_copy()函数

    template <class InputIterator, class ForwardIterator>inline ForwardIterator uninitialized_copy ...

  7. 【STL源码学习】std::list类的类型别名分析

    有了点模板元编程的traits基础,看STL源码清晰多了,以前看源码的时候总被各种各样的typedef给折腾得看不下去, 将<list>头文件的类继承结构简化如下 #include < ...

  8. STL源码剖析--迭代器(转)

    一.为什么需要traits编程技术 前面说了很多关于traits的光荣事迹,但是却一直没有介绍traits究竟是个什么东西,究竟是用来干什么的?traits在英文解释中就是特性,下面将会引入trait ...

  9. STL源码--iterator和traits编程技法

    第一部分 iterator学习 STL iterators定义: 提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表达方式. 任何iteartor都应该提供5 ...

  10. STL源码剖析 迭代器(iterator)概念与编程技法(三)

    1 STL迭代器原理 1.1  迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型,STL设计的精髓在于,把容器(Containers)和算法(Algorithms)分开,而迭代器(i ...

随机推荐

  1. JS动态特性

    var arr=[]; arr['js']='jquery'; arr['css']='oocss'; var obj={}; for(var i in arr) { obj[i]=arr[i]; } ...

  2. NFC(12)使用Android Beam技术传输文本数据及它是什么

    Android Beam技术是什么 Android Beam的基本理念就是两部(只能是1对1,不可像蓝牙那样1对多)NFC设备靠近时(一般是背靠背),通过触摸一部NFC设备的屏幕,将数据推向另外一部N ...

  3. 摄像头(1)拍照的主要API,权限和特性,判断有没有摄像头的方法

    支持 Android SDK支持操作Android设备内置的照相机.从Android2.3开始,支持操作多个摄像头(主要指前置摄像头和后置照相机).通过照相机可以拍照和录像. 注意事项 是否支持照相机 ...

  4. FreeMarker中if标签内的判断条件

    reeMarker中的<#if>标签除了里面直接判断 boolean 类型的变量外,也可以进行表达式判断,有几个细节记录一下 1. 判断对象是否存在(null) 经常会用到,如果对象 != ...

  5. bzoj1607: [Usaco2008 Dec]Patting Heads 轻拍牛头

    筛法. 枚举每个数,它会对它的倍数的答案有贡献. 数大了以后,倍数相应少了很多.比枚举每个数的约数要好的多. 自己yy了一种分步做法.小于sqrt(m)被当作约数枚举,大于sqrt(m)的枚举倍数. ...

  6. BZOJ_1018_[SHOI2008]_交通堵塞traffic_(线段树)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1018 \(2*n\)的距形,起初没有边相连,之后有三种操作: 1.加边. 2.删边. 3.询问 ...

  7. 以CTE表达式实现MSSQL的字符串分割函数

    ALTER     FUNCTION [dbo].[Split] (@sep varchar(2), @s varchar(512))RETURNS tableASRETURN (    WITH P ...

  8. oracle导入到Excel

    一.从oracle到处数据到excel文件方法一.直接从PL/SQL中,全选数据,然后复制粘贴到excel中: 方法二.同样是通过PL/SQL,在数据列中,点击右键-->导出结果-->选择 ...

  9. SCI杂志分区规则

    1区:该期刊的影响因子排名位于其所在学科排名的前5% 2区:该期刊的影响因子排名位于其所在学科排名的前20%但未进入5% 3区:该期刊的影响因子排名位于其所在学科排名的前50%但未进入20%的 4区: ...

  10. pattern目录

    pattern目录 1.创建型模式 JDK1.5枚举Singleton    单例模式 AbstractFactory  工厂方法模式    简单工厂模式 Builder Prototype 2.结构 ...