2013-05-01 27 views
1

我試圖設置我創建的名爲Event的類的優先級隊列。在我嘗試這個之前的兩行中,我設置了另外兩個優先級隊列,這些隊列似乎工作正常,但第三個隊列中出現錯誤。有什麼建議麼?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

你會得到什麼錯誤? – 2013-05-01 02:34:24

回答

1

您需要在Event類中定義一個比較運算符,或者將它作爲優先級隊列的模板參數。

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

注意:這基本上幾乎沒有道理。 97.2%的時間你應該做一個自定義的比較,而不是這樣做。 – David 2013-05-01 02:37:34

+1

@那麼,@Dave?這似乎是非常有意義的,並遵從封裝規則 - 一個對象是否小於另一個對象是類的屬性,而不是某種外部函數呢?或者是另外2.8%的這部分? :-) – paxdiablo 2013-05-01 02:39:55

+0

@paxdiablo'1秒<2秒... ...這是有道理的。 'event1 David 2013-05-01 03:13:39

0

當你不指定Compare模板參數,你在你的事件結構聲明的operator<。隊列還有哪些知道哪個是要提取的最小元素?

相關問題