我想将自定义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*
参与此问题。
答案 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;
}