c ++ priority_queue非pod数据类型,push()编译错误

时间:2017-10-12 18:19:41

标签: c++ most-vexing-parse

我正在尝试使用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()。有人可以帮忙。

谢谢你, 艾哈迈德。

0 个答案:

没有答案