32.6 排序和搜索

排序和已排序序列中的搜索是非常基础的操作,而程序员对这两个操作的需求可能有很大的差异。默认的比较操作是<运算符,值a和b的相等性通过!(a<b)&&!(b<a)来判定,而不是使用运算符==。

除了“普通排序”外,还有其他很多版本:

sort()算法要求随机访问迭代器(见33.1.2节)。

对is_sorted_until(),不要理会它的名字,它其实返回一个迭代器,而不是一个bool。

标准库list(见31.3节)并不提供随机访问迭代器,因此只能用特殊的list操作(见31.4.2节)来排序list,或者先将list的元素拷贝到一个vector中,排序这个vector,然后再将元素拷回list:

基础的sort()很高效(平均时间复杂性N*log(N))。如果需要一个稳定排序算法,可使用stable_sort(),这是一个N*log(N)*log(N)时间的算法,当系统有足够的额外内存时,可缩短为N*log(N)。函数get_temporary_buffer()可以用来获取额外内存(见34.6节)。stable_sort()可以保证相等元素的相对顺序,sort()则不能保证。 ...

Get C++程序设计语言(第4部分:标准库)(原书第4版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.