1

我正在尝试为我创建的名为 Event 的类设置优先级队列。在我尝试此操作之前的 2 行中,我设置了 2 个其他优先级队列,它们似乎工作正常,但在第 3 行出现错误。有什么建议么?

class Event{
    enum eventType { Arrival, CPUburstCompletion, IOcompletion, TimerExpired };
    double time; // Defined as time units since the start of the simulation
};

vector<process> processTable;
int CPU;
int IO;
priority_queue< int, vector<int> > readyQueue;
priority_queue< int, vector<int> > IO_Queue;
priority_queue< Event, vector<Event> > eventQueue;

我的 Event 类中没有比较器功能。我把它放进去,但我仍然得到一个错误。我没有正确编写比较器吗?

class Event{
    enum eventType { Arrival, CPUburstCompletion, IOcompletion, TimerExpired };
    double time; // Defined as time units since the start of the simulation
    bool operator()(Event& e1, Event& e2){
        if (e1.time < e2.time){
            return true;
        }
        else{
            return false;
        }
    }
};

vector<process> processTable;
int CPU;
int IO;
priority_queue< int, vector<int> > readyQueue;
priority_queue< int, vector<int> > IO_Queue;
priority_queue< Event, vector<Event> > eventQueue;
4

2 回答 2

1

您需要在 Event 类中或作为优先级队列的模板参数定义一个比较运算符。

class Event{
 ...
  public: 
     bool operator<(const Event &other) const {return time < other.time;}
};
于 2013-05-01T02:35:56.190 回答
0

由于您没有指定Compare模板参数,因此您必须operator<在 Event 结构中声明一个。队列如何知道要提取的最小元素是什么?

于 2013-05-01T02:36:28.267 回答