2016-07-14 100 views
0

我想定義一個自定義priority_queuepriority_queue<int, vector<int>, TCOMP>,其中int這裏存儲在priority_queue之外定義的向量arr的索引。例如:在priority_queue中比較參數

vector<int> arr = {2, 5, 1, 6, 10, 3}; 
struct TCOMP 
{ 
    bool operator()(int index1, int index2) const 
    { return arr[index1] < arr[index2]; } 
} 
priority_queue<int, vector<int>, TCOMP> pq; 

有沒有辦法做到這一點?請注意,我不喜歡在此問題中涉及int*

+1

「有沒有辦法做到這一點? - 拋開語法錯誤,你不是這麼做嗎? – WhozCraig

+0

如果您遇到特定問題,請更好地發佈[mcve]。否則,澄清你的問題。 – juanchopanza

+0

是的,我當然會測試它,並知道有語法錯誤。我想要的是,我怎樣才能讓priority_queue只包含向量的索引,以便索引是堆排序的。 –

回答

0

將比較謂詞顯式綁定到數組。這會給你更多的靈活性,因爲你可以在不同的數組中使用它。

#include <vector> 
#include <queue> 
using namespace std; 

struct TCOMP 
{ 
    const vector<int>& arr; 
    TCOMP(const vector<int>* a) : arr(*a) {} 

    bool operator()(int index1, int index2) const 
    { return arr[index1] < arr[index2]; } 
}; 


int main() 
{ 
    vector<int> arr = {2, 5, 1, 6, 10, 3}; 
    priority_queue<int, vector<int>, TCOMP> pq((TCOMP(&arr))); 

    return 0; 
}