2013-05-01 1 views
1

Я пытаюсь настроить очередь приоритетов для созданного мной класса, называемого Event. В 2 строках, прежде чем я попробую это, у меня есть еще 2 очереди очередей, которые, похоже, работают нормально, но я получаю сообщение об ошибке на третьем. Какие-либо предложения?C++ У меня возникли проблемы с настройкой очереди приоритетов созданного мной класса

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; 
+0

Какая ошибка вы получаете? –

ответ

1

Вам необходимо определить оператор сравнения либо в классе Event, либо в качестве параметра шаблона в очереди приоритетов.

class Event{ 
... 
    public: 
    bool operator<(const Event &other) const {return time < other.time;} 
}; 
+0

Примечание: Это почти никогда не имеет смысла. 97,2% времени, когда вы должны сделать пользовательский компаратор, не делайте этого. – David

+1

@ Как же, @Dave? Это, по-видимому, имеет прекрасный смысл и подчиняется правилам инкапсуляции - независимо от того, является ли один объект меньшим, чем другой, свойство класса, а не какая-то внешняя функция, верно? Или эта часть других 2,8%? :-) – paxdiablo

+0

@paxdiablo '1 секунда <2 секунды' ... это имеет смысл. 'event1 David

0

Как вы не указали Compare аргумент шаблона, вы должны объявить operator< в вашей структуре событий. Как еще очередь, чтобы узнать, каков минимальный элемент для извлечения?

 Смежные вопросы

  • Нет связанных вопросов^_^