【发布时间】:2016-06-10 10:49:50
【问题描述】:
在 C++ 中使用 STL 算法时,我发现很多方法,如 std::merge、std::inplace_merge、std::set_union、std::upper_bound、std::lower-bound 等...仅将排序数据作为输入。
在排序的数据上,这些算法会给出更快的结果是有道理的,但为什么它们也不能处理未排序的数据呢?为什么大多数算法都设计有这样的数据依赖关系?。
【问题讨论】:
-
那是因为它需要检查一个序列是否已排序,这会将像
std::lower_bound这样的算法的复杂度从 O(log n) 更改为 O(n)。如果您不确定,也没有什么可以阻止您预先排序。 -
这些是非常常见的算法,不应该浪费时间在继续之前检查数据是否已排序。您始终可以创建一个包装函数,在调用算法之前对数据进行预排序。我想你可以有一个调试版本的算法,如果数据没有事先排序,就会抛出异常。
标签: c++ stl stl-algorithm