创建 STL 最小堆优先级队列?
Creating a STL min heap priority queue?
我的任务是实现一个最小堆优先级队列,使用 m_time 成员变量对每个队列对象进行排序。
我的问题是我无法管理队列以按最小优先而不是最大优先排序。
我在 .h 文件中有一个名为 Event 的结构,它包含三个变量:
struct Event
{
Event(int time=-1, int grind=-1, bool val=false)
{ m_time=time;m_grindNr=grind; m_value=val;}
int m_time;
int m_grindNr;
bool m_value;
};
下面的代码是 .cpp 文件中的内容:
struct compare
{
bool operator()(const Event& a, const Event& b)
{
return a.m_time < b.m_time;
}
};
void main()
{
priority_queue <Event,vector<Event>, compare> Que;
Event firstEvent;
firstEvent.m_time = 2;
firstEvent.m_grindNr = 0;
firstEvent.m_value = 0;
Que.push(firstEvent);
Event secondEvent;
secondEvent.m_time = 5;
secondEvent.m_grindNr = 0;
secondEvent.m_value = 0;
Que.push(secondEvent);
Event tempEvent = Que.top(); //Takes the top value
Que.pop();
cout << tempEvent.m_time << " "; //Should print number 2, but prints 5
tempEvent = Que.top(); //Takes the top value
Que.pop();
cout << tempEvent.m_time << endl; //Should print number 5, but prints 2
}
我也试过在优先级队列参数中使用std::less,但结果相同。
希望您能理解我的问题,在此先感谢您。
您必须使用 greater
,因为 priority_queue 先取 最大的 。
所以将您的比较更改为
return b.m_time < a.m_time;
我的任务是实现一个最小堆优先级队列,使用 m_time 成员变量对每个队列对象进行排序。 我的问题是我无法管理队列以按最小优先而不是最大优先排序。
我在 .h 文件中有一个名为 Event 的结构,它包含三个变量:
struct Event
{
Event(int time=-1, int grind=-1, bool val=false)
{ m_time=time;m_grindNr=grind; m_value=val;}
int m_time;
int m_grindNr;
bool m_value;
};
下面的代码是 .cpp 文件中的内容:
struct compare
{
bool operator()(const Event& a, const Event& b)
{
return a.m_time < b.m_time;
}
};
void main()
{
priority_queue <Event,vector<Event>, compare> Que;
Event firstEvent;
firstEvent.m_time = 2;
firstEvent.m_grindNr = 0;
firstEvent.m_value = 0;
Que.push(firstEvent);
Event secondEvent;
secondEvent.m_time = 5;
secondEvent.m_grindNr = 0;
secondEvent.m_value = 0;
Que.push(secondEvent);
Event tempEvent = Que.top(); //Takes the top value
Que.pop();
cout << tempEvent.m_time << " "; //Should print number 2, but prints 5
tempEvent = Que.top(); //Takes the top value
Que.pop();
cout << tempEvent.m_time << endl; //Should print number 5, but prints 2
}
我也试过在优先级队列参数中使用std::less,但结果相同。
希望您能理解我的问题,在此先感谢您。
您必须使用 greater
,因为 priority_queue 先取 最大的 。
所以将您的比较更改为
return b.m_time < a.m_time;