【发布时间】:2016-01-03 04:26:50
【问题描述】:
对于适用的数据类型,良好的基数排序可以大大击败比较排序,但 std::sort 通常实现为 introsort。是否有理由不使用基数排序来实现std::sort?基数排序不足以实现std::sort,因为std::sort 只要求类型是可比较的,但对于比较和基于基数的排序产生相同答案的类型(例如int),这似乎是一个容易实现的目标未采摘。
在适当的时候使用基数排序的重载实现std::sort 是否合法? std::sort 的要求是否从根本上阻止了这种情况?
编辑:我应该更清楚一点。我在问标准库的实现是否合法。我不是在询问标准库实现的用户在std 命名空间中放置任何东西。我知道这样做是非法的,除非在特定情况下。
【问题讨论】:
-
虽然你可以重载 std::sort,但你真的想弄乱标准命名空间吗?最好实现一个排序函数,在必要时调用 std::sort。
-
@DavidHaim 嗯?如果我正在实现 C++ 标准库,我会要求弄乱标准命名空间。
-
如果您谈论标准库实现,那么一切都会发生。 'as-if' 规则适用。
-
@zch 这就是问题所在!基数排序能否满足
std::sort的“假设”规则? -
我认为你可以做到。不过
std::stable_sort是另一回事,因为它引入了平等的概念。
标签: c++ sorting language-lawyer standard-library