【发布时间】:2020-12-15 06:31:11
【问题描述】:
我正在尝试为qsort 找出一种方法,以便在比较函数发现元素由于某种原因对排序无效时抛出异常或指示错误情况。
例如,在这个比较函数中,如果some_function的返回值为5,我需要指出我的排序无效的错误条件。
我应该如何修改我的比较功能?
int compare (const void * a, const void * b)
{
int ret1 = some_func(a);
int ret2 = some_func(b):
return ( ret1 - ret2 );
}
我正在处理遗留代码库,因此我无法使用 std::sort,并且由于实现的性质,事先调用 some_func 也可能涉及大量更改,所以我正在寻找了解是否有可能的解决方法。
【问题讨论】:
-
为什么不预先检查并避免部分排序您的数据结构?
-
qsort 是一个 C 库函数,对 C++ 和异常一无所知。你为什么不使用
std::sort,而是尽可能频繁地抛出异常? -
顺便说一句。自 C++11 以来,
std::sort必须使用比快速排序更好的算法(在大 O 表示法方面更好)。 -
@Yksisarvinen
qsort()不必使用快速排序 -
@Yksisarvinen N.B.符号就是:符号。你真正指的是最坏情况下的算法复杂性(无论是时间还是内存)。
标签: c++ sorting exception stl qsort