src/ell/util/PriorityQueue.hh
Go to the documentation of this file.00001 #ifndef PRIORITYQUEUE_HH_ 00002 #define PRIORITYQUEUE_HH_ 00003 00004 #include <map> 00005 #include <set> 00006 00007 #include "ell/State.hh" 00008 00009 namespace ell { 00010 namespace util { 00011 00017 template<class QV> // QueueValue of PriorityQueue_ as template parameter 00018 class PriorityQueue 00019 { 00020 public: 00021 00023 class QueueKey { 00024 public: 00026 double E; 00028 CSequence s; 00031 bool operator<(const QueueKey& toCompare) const; 00032 00033 QueueKey(); 00034 QueueKey(const double E, const CSequence& s); 00035 ~QueueKey(); 00036 }; 00037 00038 00039 protected: 00041 typedef typename std::map< QueueKey, QV > InternalPQtype; 00042 00044 InternalPQtype pq; 00045 00046 public: 00047 00049 typedef typename InternalPQtype::const_iterator const_iterator; 00051 typedef typename InternalPQtype::iterator iterator; 00053 typedef typename InternalPQtype::size_type size_type; 00054 00056 PriorityQueue(); 00058 virtual ~PriorityQueue(); 00059 00061 const_iterator begin(void) const; 00063 const_iterator end(void) const; 00064 00066 iterator begin(void); 00068 iterator end(void); 00069 00071 const_iterator top(void) const; 00072 00074 void pop(void); 00075 00078 size_type size(void) const; 00079 00082 bool empty(void) const; 00083 00088 const_iterator find(const State* s) const; 00093 iterator find(const State* s); 00098 const_iterator find(const QueueKey& key) const; 00103 iterator find(const QueueKey& key); 00104 00112 iterator insert(const State* keyState); 00120 iterator insert(const QueueKey& key); 00121 00124 void erase(const State* s); 00127 void erase(const QueueKey& key); 00128 00131 double getMaxE(void) const; 00132 00136 void reduceMaxE(const double maxE); 00137 00138 }; 00139 00140 } // namespace util 00141 } // namespace ell 00142 00143 #include "ell/util/PriorityQueue.icc" 00144 00145 #endif /*PRIORITYQUEUE_HH_*/