我需要使用std::qsort()
对nd-Point数组进行排序。但是我得到一个错误:
没有已知的从'function〈int(const void *,const void )〉'到'__compar_fn_t'(又称为'int()(const void *,const void *)')的转换'
如何解决它,或排序它的目录在另一种方法?
#include <iostream>
#include <functional>
int d, n;
struct Point {
int *x;
Point() : x(new int[d]) {};
};
std::function<int(const void *, const void *)> make_cmp(int dir) {
return [dir](const void *a, const void *b)->int {
auto a_ = (Point *)a;
auto b_ = (Point *)b;
return a_->x[dir] - b_->x[dir];
};
}
void sort_points(Point *value, int length, int dir) {
std::qsort(value, length, sizeof(Point), make_cmp(dir));
}
1条答案
按热度按时间kr98yfug1#
如果你必须使用
std::qsort
,那么你基本上是在用C而不是C++编写。这可能是少数几种全局变量是最不坏的方法的情况之一。如果一次不会从多个线程调用此函数,则可以删除
thread_local
。(Note如果值可能超出
[INT_MIN/2, INT_MAX/2]
范围,则需要用不易溢出的值替换减法。)