[英]Custom comparator for priority queue
我想使用KD樹實現K最近鄰居搜索
為了維護最近的點,我構造了一個優先級隊列,其中每個元素的類型均為double *(指向數組的指針)。 我有我的自定義比較器類,我向其傳遞了兩個參數,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:注意:需要一個類型,得到了'comparator(query,d)'
我不太熟悉const和constexpr及其用法。 我在這里停留了一段時間,無法理解錯誤。 任何幫助表示贊賞。
您正在嘗試將對象傳遞給template參數; 但是,模板參數必須是類型,因此第三個參數必須是比較器的類型。
對於比較器對象,需要將其傳遞給您的priority_queue的構造函數,如下所示:
comparator pq_cmp(query, d);
priority_queue <double* , vector<double*>, decltype(pq_cmp) > min_heap(pq_cmp);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.