STL 常用数据结构

原创 2007年10月08日 10:16:00

Sort 和容器

--------------------------------------------------------------------------------
STL中标准容器主要vector, list, deque, string, set, multiset, map, multimay, 其中set, multiset, map, multimap都是以树结构的方式存储其元素详细内容请参看:学习STL map, STL set之数据结构基础. 因此在这些容器中,元素一直是有序的。
这些容器的迭代器类型并不是随机型迭代器,因此,上述的那些排序函数,对于这些容器是不可用的。上述sort函数对于下列容器是可用的:

vector
string
deque
如果你自己定义的容器也支持随机型迭代器,那么使用排序算法是没有任何问题的。
对于list容器,list自带一个sort成员函数list::sort(). 它和算法函数中的sort差不多,但是list::sort是基于指针的方式排序,也就是说,所有的数据移动和比较都是此用指针的方式实现,因此排序后的迭代器一直保持有效(vector中sort后的迭代器会失效).


选择合适的排序函数

--------------------------------------------------------------------------------
为什么要选择合适的排序函数?可能你并不关心效率(这里的效率指的是程序运行时间), 或者说你的数据量很小, 因此你觉得随便用哪个函数都无关紧要。
其实不然,即使你不关心效率,如果你选择合适的排序函数,你会让你的代码更容易让人明白,你会让你的代码更有扩充性,逐渐养成一个良好的习惯,很重要吧  。

如果你以前有用过C语言中的qsort, 想知道qsort和他们的比较,那我告诉你,qsort和sort是一样的,因为他们采用的都是快速排序。从效率上看,以下几种sort算法的是一个排序,效率由高到低(耗时由小变大):

partion
stable_partition
nth_element
partial_sort
sort
stable_sort
记得,以前翻译过Effective STL的文章,其中对如何选择排序函数总结的很好:
若需对vector, string, deque, 或 array容器进行全排序,你可选择sort或stable_sort;
若只需对vector, string, deque, 或 array容器中取得top n的元素,部分排序partial_sort是首选.
若对于vector, string, deque, 或array容器,你需要找到第n个位置的元素或者你需要得到top n且不关系top n中的内部顺序,nth_element是最理想的;
若你需要从标准序列容器或者array中把满足某个条件或者不满足某个条件的元素分开,你最好使用partition或stable_partition;
若使用的list容器,你可以直接使用partition和stable_partition算法,你可以使用list::sort代替sort和stable_sort排序。若你需要得到partial_sort或nth_element的排序效果,你必须间接使用。正如上面介绍的有几种方式可以选择。
总之记住一句话: 如果你想节约时间,不要走弯路, 也不要走多余的路!  

STL中常用数据结构

STL中常用的数据结构: [1]  stl中stack、queue默认的底层实现为deque结构。 [2]  deque:用map管理多个size大小的连续内存块,方便头尾插入。 [3]  vecto...
  • woniu317
  • woniu317
  • 2014年12月16日 10:23
  • 1544

【C++研发面试笔记】5. C++ STL数据结构

【C++研发面试笔记】5. C++ STL数据结构(容器)5.1 常见数据结构(容器)分类 vector:(连续的空间存储,可以使用[]操作符)快速的访问随机的元素,快速的在末尾插入元素,但是在序列中...
  • tostq
  • tostq
  • 2016年10月02日 18:12
  • 1611

stl容器的实现原理-与数据结构的对应关系

 STL容器的实现原理    STL共有六大组件  1、容器。2、算法。3、迭代器。4、仿函数。6、适配器。     STL容器的实现原理 STL来管理数据十分...
  • hudfang
  • hudfang
  • 2016年10月26日 14:40
  • 1431

STL 的一些数据结构比较

从功能的角度,基本上vector都支持,这里重点是支持的高效的操作。每种数据结构支持不同的高效操作,所谓高效操作就是O(1) 或者O(lgn)的复杂度。 stack 高效的尾部增删 vector ...
  • binling
  • binling
  • 2015年06月04日 10:50
  • 775

STL是什么

STL是什么
  • u010906311
  • u010906311
  • 2016年02月09日 20:38
  • 1308

数据结构与STL.肖波,徐雅静.高清文字版

  • 2014年04月28日 13:09
  • 52.16MB
  • 下载

STL常用数据结构总结

数据结构机考的你,想不想偷懒?快来看一看c++的STL吧。   STL(standard template library)标准模板库提供了一些列数据结构和算法,帮你更高效地解决问题。下面列出一些常...
  • Qer_computerscience
  • Qer_computerscience
  • 2017年02月19日 15:18
  • 651

STL 常用数据结构

Sort 和容器 --------------------------------------------------------------------------------STL中标准容器主要v...
  • coovig
  • coovig
  • 2007年10月08日 10:16
  • 4622

STL 常见库函数

STL各类库函数
  • Lost_in_wine
  • Lost_in_wine
  • 2015年11月26日 22:02
  • 1372

c++中STL常用的数据结构

一.stack(栈) 常见的操作: #include using namespace std; int main() { stack S; S.push(3); S.p...
  • bbtl_ast
  • bbtl_ast
  • 2017年06月02日 16:00
  • 332
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL 常用数据结构
举报原因:
原因补充:

(最多只允许输入30个字)