5 \brief Code of IndexedHeap
7 //============================================================================
8 template <class T, class CT, class IT>
9 std::ostream& operator << (std::ostream& s, const IndexedHeap<T,CT,IT>& t)
12 for (int i=0; i<t.size(); i++) s << t[i] << " " ;
16 //============================================================================
19 //===========================================================
20 template <class T, class CT, class IT>
21 IndexedHeap<T,CT,IT>::IndexedHeap ( const CT& comp, const IT& index )
22 : m_c(&comp), m_i(&index)
24 //===========================================================
27 //===========================================================
28 template <class T, class CT, class IT>
29 void IndexedHeap<T,CT,IT>::set( const CT& comp )
33 //===========================================================
35 //===========================================================
36 template <class T, class CT, class IT>
37 void IndexedHeap<T,CT,IT>::set ( const IT& index )
41 //===========================================================
44 //===========================================================
45 template <class T, class CT, class IT>
46 int IndexedHeap<T,CT,IT>::insert(T t)
50 return upsort(size()-1);
52 //===========================================================
54 //===========================================================
55 template <class T, class CT, class IT>
56 T& IndexedHeap<T,CT,IT>::top()
58 // lglASSERT( size() > 0)
61 //===========================================================
64 //===========================================================
65 template <class T, class CT, class IT>
66 const T& IndexedHeap<T,CT,IT>::top() const
68 // lglASSERT( size() > 0)
71 //===========================================================
73 //===========================================================
74 template <class T, class CT, class IT>
75 T IndexedHeap<T,CT,IT>::remove_top()
77 // lglASSERT( size() > 0 )
90 //============================================================================
94 //============================================================================
95 template <class T, class CT, class IT>
96 T IndexedHeap<T,CT,IT>::remove(int n)
98 // lglASSERT ( (n>=0)&&(n<size()) )
111 //============================================================================
114 //============================================================================
115 template <class T, class CT, class IT>
116 void IndexedHeap<T,CT,IT>::clear()
118 for (typename std::vector<T>::iterator i=m_p.begin(); i!=m_p.end(); ++i)
120 (*m_i)(*i)->delete();
125 //============================================================================
128 //============================================================================
129 template <class T, class CT, class IT>
130 int IndexedHeap<T,CT,IT>::father( int i) const
134 //============================================================================
136 //============================================================================
137 template <class T, class CT, class IT>
138 int IndexedHeap<T,CT,IT>::rightson( int i) const
142 //============================================================================
144 //============================================================================
145 template <class T, class CT, class IT>
146 int IndexedHeap<T,CT,IT>::leftson( int i) const
150 //============================================================================
152 //============================================================================
153 template <class T, class CT, class IT>
154 void IndexedHeap<T,CT,IT>::swap(int i, int j)
163 //============================================================================
167 //============================================================================
168 template <class T, class CT, class IT>
169 int IndexedHeap<T,CT,IT>::upsort(int i)
171 //if (i==0) return i;
173 while ((i>0)&&(*m_c)(m_p[i],m_p[j]))
181 //============================================================================
184 //============================================================================
185 template <class T, class CT, class IT>
186 int IndexedHeap<T,CT,IT>::downsort(int i)
191 unsigned int ls = leftson(i);
194 bool lc = ((*m_c)(m_p[i],m_p[ls]));
195 unsigned int rs = ls + 1;
197 if (rs<m_p.size()) rc = ((*m_c)(m_p[i],m_p[rs]));
202 if ((*m_c)(m_p[ls],m_p[rs]))
231 //============================================================================
234 //============================================================================
236 //============================================================================