【发布时间】:2018-03-30 14:11:01
【问题描述】:
我想用KD树实现K个最近邻搜索
为了维护最近的点,我构造了一个优先级队列,其中每个元素都是 double* 类型(指向数组的指针)。我有我的自定义比较器类,我向其传递 2 个参数、double* 查询和 int d(维度):
priority_queue <double* , vector<double*>, comparator(query,d) > min_heap;
我的比较器类如下所示:
class comparator{
double* query;
int d;
public:
int operator()( double* point1, double* point2) {
double dist1 = 0,dist2 = 0;
for(int i=0;i<d;i++){
dist1 += (point1[i] - query[i]) * (point1[i] - query[i]);
dist2 += (point2[i] - query[i]) * (point2[i] - query[i]);
}
return dist1 < dist2;
}
comparator(double * query,int d)
{
this->query = query;
this->d = d;
}
};
我收到以下错误:
main.cpp:92:63: 错误:常量表达式中的非文字类型“比较器”的临时变量
priority_queue , 比较器(query,d) > min_heap;
main.cpp:20:7: 注意:‘比较器’不是字面的,因为:
类比较器{main.cpp:20:7: 注意:‘比较器’不是聚合,没有普通的默认构造函数,也没有不是复制或移动构造函数的 constexpr 构造函数
main.cpp:92:65: 错误:“模板类 std::priority_queue”的模板参数列表中参数 3 的类型/值不匹配
priority_queue , 比较器(query,d) > min_heap;
main.cpp:92:65: 注意:期望一个类型,得到'comarator(query, d)'
我不熟悉 const 和 constexpr 及其用法。我在这里停留了一段时间,无法理解错误。任何帮助表示赞赏。
【问题讨论】:
标签: c++ priority-queue