📄 adj__list_8h-source.html
字号:
<a name="l00113"></a>00113 <span class="keyword">friend</span> ostream& operator<< <>(ostream&, <span class="keyword">const</span> <a class="code" href="structvertex__info.html">vertex_info<VERTEX_T, EDGE_T, ALLOC></a>&);<a name="l00114"></a>00114 <a name="l00116"></a><a class="code" href="structvertex__info.html#487be5ba6c64222a987df9935b35a7e3">00116</a> VERTEX_T <a class="code" href="structvertex__info.html#487be5ba6c64222a987df9935b35a7e3">v</a>; <span class="comment">//vertex object</span><a name="l00117"></a>00117 <span class="keywordtype">int</span> id; <span class="comment">//id of this vertex</span><a name="l00118"></a>00118 EDGES out_edges; <span class="comment">//stores all edges for an undirected graph</span><a name="l00119"></a>00119 EDGES in_edges; <span class="comment">//calls to this member should be made only for digraphs</span><a name="l00120"></a>00120 <a name="l00121"></a>00121 }; <span class="comment">//end struct vertex_info</span><a name="l00122"></a>00122 <a name="l00123"></a>00123 <span class="comment">// overloaded extraction over a pair - used by following hash_map extraction</span><a name="l00124"></a>00124 <span class="keyword">template</span><<span class="keyword">typename</span> E_T><a name="l00125"></a>00125 ostream& operator<< (ostream& ostr, const std::pair<int, E_T>& p) {<a name="l00126"></a>00126 ostr<<<span class="stringliteral">"("</span><<p.first<<<span class="stringliteral">" "</span><<p.second<<<span class="stringliteral">")"</span>;<a name="l00127"></a>00127 <span class="keywordflow">return</span> ostr;<a name="l00128"></a>00128 }<a name="l00129"></a>00129 <a name="l00130"></a>00130 <span class="comment">// overloaded extraction over the edgelist map</span><a name="l00131"></a>00131 <span class="keyword">template</span><<span class="keyword">typename</span> E_T><a name="l00132"></a>00132 ostream& operator<< (ostream& ostr, const vector<pair<int, E_T> >& hm) {<a name="l00133"></a>00133 <span class="keyword">typename</span> vector<pair<int, E_T> >::const_iterator it;<a name="l00134"></a>00134 <span class="keywordflow">for</span>(it=hm.begin(); it!=hm.end(); it++)<a name="l00135"></a>00135 std::cout<<*it<<<span class="stringliteral">" "</span>;<a name="l00136"></a>00136 <span class="keywordflow">return</span> ostr;<a name="l00137"></a>00137 }<a name="l00138"></a>00138 <a name="l00139"></a>00139 <a name="l00140"></a>00140 <span class="comment">//friend extraction over output streams</span><a name="l00141"></a>00141 <span class="keyword">template</span><<span class="keyword">typename</span> V_T, <span class="keyword">typename</span> E_T><a name="l00142"></a>00142 ostream& operator<< (ostream& ostr, const vertex_info<V_T, E_T>& vi) {<a name="l00143"></a>00143 ostr<<<span class="stringliteral">"["</span><<vi.id<<<span class="stringliteral">"|"</span><<vi.v<<<span class="stringliteral">"] OUT: "</span>;<a name="l00144"></a>00144 <span class="keyword">typename</span> <a class="code" href="structvertex__info.html">vertex_info<V_T, E_T>::CONST_EIT</a> it;<a name="l00145"></a>00145 ostr<<vi.out_edges;<a name="l00146"></a>00146 ostr<<<span class="stringliteral">" IN: "</span>;<a name="l00147"></a>00147 ostr<<vi.in_edges;<a name="l00148"></a>00148 ostr<<endl;<a name="l00149"></a>00149 <span class="keywordflow">return</span> ostr;<a name="l00150"></a>00150 }<span class="comment">//end operator<<</span><a name="l00151"></a>00151 <a name="l00152"></a>00152 <span class="keyword">template</span><<span class="keyword">typename</span> V_T, <span class="keyword">typename</span> E_T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>ALLOC ><a name="l00153"></a>00153 <span class="keyword">class </span><a class="code" href="classadj__list.html">adj_list</a>;<a name="l00154"></a>00154 <a name="l00155"></a>00155 <span class="keyword">template</span><<span class="keyword">typename</span> V_T, <span class="keyword">typename</span> E_T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>ALLOC ><a name="l00156"></a>00156 ostream& operator<< (ostream&, const adj_list<V_T, E_T, ALLOC>&);<a name="l00157"></a>00157 <a name="l00164"></a>00164 <span class="keyword">template</span><<span class="keyword">typename</span> V_T, <span class="keyword">typename</span> E_T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>ALLOC=std::allocator><a name="l00165"></a><a class="code" href="classadj__list.html">00165</a> <span class="keyword">class </span><a class="code" href="classadj__list.html">adj_list</a><a name="l00166"></a>00166 {<a name="l00167"></a>00167 <a name="l00168"></a>00168 <span class="keyword">public</span>:<a name="l00169"></a>00169 <span class="keyword">typedef</span> V_T VERTEX_T;<a name="l00170"></a>00170 <span class="keyword">typedef</span> E_T EDGE_T;<a name="l00171"></a>00171 <span class="keyword">typedef</span> <a class="code" href="structvertex__info.html">vertex_info<VERTEX_T, EDGE_T, ALLOC></a> <a class="code" href="structvertex__info.html">VERTEX_INFO</a>;<a name="l00172"></a>00172 <span class="keyword">typedef</span> <a class="code" href="classadj__list.html">adj_list<V_T, E_T, ALLOC ></a> <a class="code" href="classadj__list.html">ADJ_L</a>;<a name="l00173"></a>00173 <a name="l00174"></a>00174 <span class="keyword">template</span><<span class="keyword">typename</span> T><a name="l00175"></a>00175 <span class="keyword">class </span>VERTEX_LIST: <span class="keyword">public</span> std::vector<T, ALLOC<T> > {};<span class="comment">//each vertex and its info is stored as a vector, for fast lookup since we'll know its unique id</span><a name="l00176"></a>00176 <a name="l00177"></a>00177 <span class="keyword">typedef</span> VERTEX_LIST<VERTEX_INFO> ADJ_LIST;<a name="l00178"></a>00178 <a name="l00179"></a>00179 <span class="keyword">typedef</span> <span class="keyword">typename</span> ADJ_LIST::iterator IT;<a name="l00180"></a>00180 <span class="keyword">typedef</span> <span class="keyword">typename</span> ADJ_LIST::const_iterator CONST_IT;<a name="l00181"></a>00181 <span class="keyword">typedef</span> <span class="keyword">typename</span> VERTEX_INFO::EIT EIT;<a name="l00182"></a>00182 <span class="keyword">typedef</span> <span class="keyword">typename</span> VERTEX_INFO::CONST_EIT CONST_EIT;<a name="l00183"></a>00183 <span class="keyword">typedef</span> std::pair<EIT, EIT> EIT_PAIR;<a name="l00184"></a>00184 <span class="keyword">typedef</span> std::pair<CONST_EIT, CONST_EIT> CONST_EIT_PAIR;<a name="l00185"></a>00185 <a name="l00186"></a>00186 <span class="keywordtype">void</span>* operator new(size_t <a class="code" href="classadj__list.html#82beab1a8b5d2aaf00b5ee265ab7f8b9">size</a>) {<a name="l00187"></a>00187 ALLOC<ADJ_L> aa;<a name="l00188"></a>00188 <span class="keywordflow">return</span> aa.allocate(size);<a name="l00189"></a>00189 }<a name="l00190"></a>00190 <a name="l00191"></a>00191 <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span> *p, size_t size) {<a name="l00192"></a>00192 <span class="keywordflow">if</span> (p) {<a name="l00193"></a>00193 ALLOC<ADJ_L> aa;<a name="l00194"></a>00194 aa.deallocate(static_cast<ADJ_L*> (p), size);<a name="l00195"></a>00195 }<a name="l00196"></a>00196 }<a name="l00197"></a>00197 <a name="l00198"></a>00198 <span class="comment">//default constructor</span><a name="l00199"></a>00199 <a class="code" href="classadj__list.html">adj_list</a>() {}<a name="l00200"></a>00200 <a name="l00201"></a>00201 IT begin() {<span class="keywordflow">return</span> _alist.begin();}<a name="l00202"></a>00202 CONST_IT begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> _alist.begin();}<a name="l00203"></a>00203 IT end() {<span class="keywordflow">return</span> _alist.end();}<a name="l00204"></a>00204 CONST_IT end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> _alist.end();}<a name="l00205"></a>00205 <a name="l00206"></a>00206 <span class="keyword">inline</span><a name="l00207"></a><a class="code" href="classadj__list.html#82beab1a8b5d2aaf00b5ee265ab7f8b9">00207</a> <span class="keywordtype">int</span> <a class="code" href="classadj__list.html#82beab1a8b5d2aaf00b5ee265ab7f8b9">size</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> _alist.size();} <a name="l00208"></a>00208 <span class="keywordtype">void</span> clear() {_alist.clear();}<a name="l00209"></a>00209 <span class="keywordtype">void</span> push_back(<span class="keyword">const</span> VERTEX_INFO& vi) {_alist.push_back(vi);}<a name="l00210"></a>00210 <a name="l00212"></a>00212 IT <a class="code" href="classadj__list.html#91205b35a8ce0ca20ce43aab5b39d87d">vertex_vals</a>(<span class="keyword">const</span> <span class="keywordtype">int</span>&);<a name="l00213"></a>00213 <a name="l00214"></a>00214 CONST_IT <a class="code" href="classadj__list.html#91205b35a8ce0ca20ce43aab5b39d87d">vertex_vals</a>(<span class="keyword">const</span> <span class="keywordtype">int</span>& idval)<span class="keyword"> const </span>{<a name="l00215"></a>00215 CONST_IT it=_alist.begin();<a name="l00216"></a>00216 <span class="keywordflow">if</span>(idval><a class="code" href="classadj__list.html#82beab1a8b5d2aaf00b5ee265ab7f8b9">size</a>()-1) {<a name="l00217"></a>00217 std::cerr<<<span class="stringliteral">"adj_list.vertex_vals: out of range vertex id, "</span><<idval<<endl;<a name="l00218"></a>00218 exit(0);<a name="l00219"></a>00219 }<a name="l00220"></a>00220 it+=idval;<a name="l00221"></a>00221 <span class="keywordflow">return</span> it;<a name="l00222"></a>00222 }<span class="comment">// end vertex_vals() const</span><a name="l00223"></a>00223 <a name="l00226"></a><a class="code" href="classadj__list.html#528f1fe0f4e10a6627285be96bfbb2d1">00226</a> std::pair<EIT, EIT> <a class="code" href="classadj__list.html#528f1fe0f4e10a6627285be96bfbb2d1">out_edges</a>(<span class="keyword">const</span> <span class="keywordtype">int</span>& idval) {<a name="l00227"></a>00227 IT it=<a class="code" href="classadj__list.html#91205b35a8ce0ca20ce43aab5b39d87d">vertex_vals</a>(idval);<a name="l00228"></a>00228 <span class="keywordflow">return</span> make_pair(it->out_begin(), it->out_end());<a name="l00229"></a>00229 }<span class="comment">//end out_edges()</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -