排序算法是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. Firefox Security Toolkit 安装

    目的: 下载Firefox Security Toolkit加载到浏览器里,增强渗透测试的工具利用. 兼容性: 目前仅支持Linux/Unix环境(可在kali上安装使用). 下载安装: wget h ...

  2. 安装Ubuntu双系统系列——更换源

    Ubuntu 有一个非常有用的命令 apt-get,它可以帮助你下载软件,还可以安装,下载并安装的命令是 apt-get install. 那Ubuntu默认是从哪里下载软件呢,这可以查看文件/etc ...

  3. [译]Atomic VS. Non-Atomic 操作

    原文链接:atomic-vs-non-atomic-operations 在网上已经写了很多关于原子操作的文章,但是通常都集中在原子的读-修改-写(RMW. read-modify-write)操作. ...

  4. struts2的action中获得request response session 对象

    在struts2中有两种方式可以得到这些对象 1.非IoC方式 要获得上述对象,关键Struts 2中com.opensymphony.xwork2.ActionContext类.我们可以通过它的静态 ...

  5. bzoj3572

    通过这题我知道了一个鬼故事,trunc(ln(128)/ln(2))=6……以后不敢轻易这么写了 好了言归正传,这题明显的构建虚树,但构建虚树后怎么树形dp呢? 由于虚树上的点不仅是议事会还有可能是议 ...

  6. [Unity3d]小地图的制作

    继续今天的学习心得,unity中小地图的制作,实现了小地图中红色小箭头代表场景中的主角,然后人物方向的转变,小地图中箭头也随之改变方向. 效果图     右上角就是小地图,上面有个红色小箭头就是代表主 ...

  7. Office启动加载vs。。。项

    PowerPoint: 选项->加载项->Chinese Translation Addin->管理[COM加载项]转到->取消Chinese Translation Addi ...

  8. 【兼容】IE下PNG色差

    IE(包括IE7)中的PNG色差问题http://bbs.blueidea.com/thread-2910513-1-1.html修正IE对PNG颜色显示错误的问题http://www.lizhenw ...

  9. 逻辑回归损失函数(cost function)

    逻辑回归模型预估的是样本属于某个分类的概率,其损失函数(Cost Function)可以像线型回归那样,以均方差来表示:也可以用对数.概率等方法.损失函数本质上是衡量”模型预估值“到“实际值”的距离, ...

  10. java vm args

    这个问题主要还是由这个问题 java.lang.OutOfMemoryError: Java heap space 引起的.第一次出现这样的的问题以后,引发了其他的问题.在网上一查可能是JAVA的堆栈 ...