2016-07-14 68 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; 
}