2015-11-02 95 views
0

当我使用一个优先级队列,这是代码:优先级队列自定义比较分段故障推

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.

我不知道比较器是否正确,我真的不知道如何创建一个自定义比较河我试图按每个状态的第一个数字排序优先级队列。

在此先感谢。

+0

存储载体的优先级队列是不是最好的主意 –

+0

我需要存储的一维或多维矢量。任何其他想法? –

回答

0

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

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

我收到以下2个错误: /puzzle.cpp:17:13:错误:使用未声明的标识符'comparator';你的意思是'运营商'吗? prioq prio(&comparator); ^ ~~~~~~~~~ 运营商 ./puzzle.cpp:17:23:error:expected a type prioq prio(&comparator); –

+0

@ elena.bdc在提及此名称之前放置'comparator'的声明 –

+1

谢谢,它已完成:) –