第二次推送时具有自定义比较器分段错误的优先级队列
Priority queue with custom comparator segmentation fault when pushing second time
我正在使用 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);
// ~~~~~~~~~~^
我正在使用 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);
// ~~~~~~~~~~^