C++标准排序文档问题

C++ standard sort documentation issue

本文关键字:问题 文档 排序 标准 C++      更新时间:2023-10-16

我的C++标准文档副本记录了标准排序函数。

25.4.1.1分拣

template<class RandomAccessIterator>
void sort(RandomAccessIterator first, RandomAccessIterator last);
...
Effects: Sorts the elements in the range [first,last).

要求:RandomAccessIterator应满足ValueSwappable(17.6.3.2)。*的类型首先应满足MoveConstructable(表20)和MoveAssignable 的要求

好吧,但它不应该也要求所提到的元素也具有可比性吗?

我希望"Requires"条款包括这样的内容:

"取消引用RandomAccessIterator所产生的类型应满足LessThanComparable的要求。"

或者更好的

"iterator_traits<RandomAccessIterator>::value_type应满足LessThanComparable的要求。"

由于24.4.1部分规定"如果Iterator是迭代器的类型,则需要定义类型…iterator_traits<Iterator>::value_type"

为什么不包括这样的语言。sort函数当然不能对不能比较的元素进行排序。

  • 好吧,但它不应该也要求所提到的元素也具有可比性吗

如果你在标准中向上滚动,你会发现排序算法的这些要求(根据§25.4):

25.4中的所有操作都有两个版本:一个版本需要Compare类型的函数对象和使用运算符<的函数对象;。

这意味着标准中已经强制要求类型使用operator<自定义比较器。

自定义比较器具有以下要求:

Compare是一个函数对象类型(20.8)应用于类型为Compare的对象的函数调用操作,当上下文转换为bool(4),如果第一个参数为true的值小于秒,否则为false。Compare组件用于假设排序关系的算法。是的假设comp不会通过取消引用的迭代器。