第二次推送时,优先级队列出现自定义比较器分段故障



我使用的是priority_queue,这是代码:

typedef vector<int> state;
typedef bool (*comp)(const state&, const state&);
typedef priority_queue<state, vector<state>, comp> prioq;
prioq prio;

我使用的是一个自定义比较器,它在这里定义:

bool comparator (const state& a , const state& b) {
    return a[0] < b[0];
}

我可以推送第一个状态,但当我尝试推送第二个状态时,我会遇到分段错误:11。

我不知道比较器是否正确,我真的不知道如何创建自定义比较器。我正在尝试按每个状态的第一个数字对priority_queue进行排序。

prioq prio;使用默认构造的比较器(在您的案例中为comp类型)构造优先级队列。这意味着内部存储的指向比较函数的指针实际上是用零初始化的。比较器(如果默认构造的比较器不够)可以初始化为作为构造函数参数传递的值:

prioq prio(&comparator);
//         ~~~~~~~~~~^

最新更新