簡體   English   中英

優先級隊列的自定義比較器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM