比较priority_queue中的参数

时间:2016-07-14 10:40:52

标签: c++ priority-queue

我想将自定义priority_queue定义为priority_queue<int, vector<int>, TCOMP>,其中int此处存储在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 个答案:

答案 0 :(得分: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;
}