在priority_queue中比较参数
问题描述:
我想定义一个自定义priority_queue
为priority_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*
。
答
将比较谓词显式绑定到数组。这会给你更多的灵活性,因为你可以在不同的数组中使用它。
#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;
}
“有没有办法做到这一点? - 抛开语法错误,你不是这么做吗? – WhozCraig
如果您遇到特定问题,请更好地发布[mcve]。否则,澄清你的问题。 – juanchopanza
是的,我当然会测试它,并知道有语法错误。我想要的是,我怎样才能让priority_queue只包含向量的索引,以便索引是堆排序的。 –