0

我的 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) 的要求。*first 的类型应满足 MoveConstructible(表 20)和 MoveAssignable 的要求

好的 - 但它是否也应该要求所引用的元素也具有可比性?

我希望“要求”条款包括以下内容:

“解除引用 的类型RandomAccessIterator应满足 . 的要求LessThanComparable。”

或者更好

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

因为 24.4.1 部分说“如果Iterator是迭代器的类型,则iterator_traits<Iterator>::value_type需要定义类型......”

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

4

1 回答 1

4
  • 好的 - 但它是否也应该要求所引用的元素也具有可比性?

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

25.4 中的所有操作都有两个版本:一个采用比较类型的函数对象,另一个使用运算符<。

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

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

Compare是一个函数对象类型(20.8)。应用于类型对象的函数调用操作的返回值Compare,当上下文转换为bool(4) 时,如果调用的第一个参数小于第二个参数,则返回 true,否则返回 false。Comparecomp 始终用于假设排序关系的算法。假定 comp 不会通过取消引用的迭代器应用任何非常量函数。

于 2013-08-07T17:41:43.407 回答