我正在尝试使用stl :: priority_queue数据结构,使用非pod数据类型作为PQ的元素,从而提供自定义比较运算符。比较函数对象中有一些hacks,我将尝试提出更好的解决方案。现在,试着让代码编译。
struct Elem {
Elem(uint32_t row, uint32_t col)
: row_(row), col_(col)
{ }
uint32_t row_, col_;
};
class mycomp {
public:
mycomp(int arr[][N])
{
arr_ = (int **) arr;
}
bool operator() (const Elem &lhs, const Elem &rhs)
{
return arr_[lhs.row_][lhs.col_] > arr_[rhs.row_][rhs.col_];
}
int **arr_;
};
int *mergeKArrays(int arr[][N], int k)
{
priority_queue<Elem, vector<Elem>, mycomp> pq(mycomp(arr));
for (uint32_t i = 0; i < k; ++i) {
pq.puh(Elem(i, 0));
}
return (int *) arr;
}
int main() {}
我收到以下编译错误:
./mergek.cc: In function ‘int* mergeKArrays(int (*)[11], int)’:
./mergek.cc:45:12: error: request for member ‘puh’ in ‘pq’, which is of non-class type ‘std::priority_queue<Elem, std::vector<Elem>, mycomp>(mycomp)’
pq.puh(Elem(i, 0));
^
我觉得我没有正确地调用方法push()。有人可以帮忙。
谢谢你, 艾哈迈德。