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::sort
和 std::list
【参考方案1】:
函数std::sort
与<algorithm>
中的许多其他函数一样,不关心容器类型,因为它适用于概念。
具体来说,函数定义为:
template< class RandomIt >
void sort( RandomIt first, RandomIt last );
如您所见,模板用于表达ValueSwappable
和RandomAccessIterator
迭代器的概念。
【讨论】:
抱歉无法理解,请您详细说明一下 另外,如果它不关心容器类型,排序函数如何比较值。 @krish_oza,阅读模板,然后阅读我在答案中添加的链接。一切都会清楚。【参考方案2】:myvector.begin()/end() 返回类型“containertype::iterator”
至于 sort() 是如何工作的,它实际上并不关心底层的容器类型,只要容器中的两个元素具有可比性即可(less<type>()
存在于该元素中,或者您指定自己的比较函数)。
【讨论】:
“可比”的要求绝对不是唯一的。 @Jefffrey 还有什么?迭代器是 RandomAccessIterator / 同一个容器中的两个迭代器? 查看我的答案中的链接(特别是ValueSwappable
和 RandomAccessIterator
要求。以上是关于C++ STL中排序算法的工作的主要内容,如果未能解决你的问题,请参考以下文章