C++ STL中排序算法的工作

Posted

技术标签:

【中文标题】C++ STL中排序算法的工作【英文标题】:Working of Sort Algorithm in C++ STL 【发布时间】:2014-01-11 03:00:23 【问题描述】:

从 Sort(begin,end) 的用法看来,只需指定容器的开始和结束索引,该函数就可以对容器进行排序。但我的问题是 sort 函数如何获取容器的类型。

std::sort(myvector.begin(), myvector.end());

从上面的代码我假设开始和结束索引是发送。向量类型和向量名称是怎么推导出来的。

【问题讨论】:

算法不关心容器的类型——只关心迭代器的类型。它需要 RandomAccessIterators,这就是为什么你不能使用 std::sortstd::list 【参考方案1】:

函数std::sort<algorithm> 中的许多其他函数一样,不关心容器类型,因为它适用于概念

具体来说,函数定义为:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

如您所见,模板用于表达ValueSwappableRandomAccessIterator 迭代器的概念。

【讨论】:

抱歉无法理解,请您详细说明一下 另外,如果它不关心容器类型,排序函数如何比较值。 @krish_oza,阅读模板,然后阅读我在答案中添加的链接。一切都会清楚。【参考方案2】:

myvector.begin()/end() 返回类型“containertype::iterator”

至于 sort() 是如何工作的,它实际上并不关心底层的容器类型,只要容器中的两个元素具有可比性即可(less&lt;type&gt;() 存在于该元素中,或者您指定自己的比较函数)。

【讨论】:

“可比”的要求绝对不是唯一的。 @Jefffrey 还有什么?迭代器是 RandomAccessIterator / 同一个容器中的两个迭代器? 查看我的答案中的链接(特别是 ValueSwappableRandomAccessIterator 要求。

以上是关于C++ STL中排序算法的工作的主要内容,如果未能解决你的问题,请参考以下文章

各大算法专题-STL篇

C++算法从std::sort到排序算法

C++拾取——使用stl标准库实现排序算法及评测

c++快速排序算法

c++ STL sort struct comp

C++中 sort 函数的使用详解