Files
ortools-clone/docs/cpp_graph/classConnectedComponentsFinder.html
2019-06-20 23:08:48 +02:00

479 lines
26 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>OR-Tools</title>
<meta http-equiv="Content-Type" content="text/html;"/>
<meta charset="utf-8"/>
<!--<link rel='stylesheet' type='text/css' href="https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic"/>-->
<link rel="stylesheet" type="text/css" href="ortools.css" title="default" media="screen,print" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
</head>
<body>
<div id="banner-container">
<div id="banner">
<span id="sfml">OR-Tools 7.1@</span>
</div>
</div>
<div id="content">
<!-- Generated by Doxygen 1.8.15 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classConnectedComponentsFinder-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">ConnectedComponentsFinder&lt; T, CompareOrHashT &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Usage: ConnectedComponentsFinder&lt;MyNodeType&gt; cc; cc.AddNode(node1); cc.AddNode(node2); cc.AddEdge(node1, node2); ...
<a href="classConnectedComponentsFinder.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="connected__components_8h_source.html">connected_components.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aa669a113d3ee23c506b97949f740b1cc"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConnectedComponentsFinder.html#aa669a113d3ee23c506b97949f740b1cc">ConnectedComponentsFinder</a> ()</td></tr>
<tr class="memdesc:aa669a113d3ee23c506b97949f740b1cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a connected components finder. <a href="#aa669a113d3ee23c506b97949f740b1cc">More...</a><br /></td></tr>
<tr class="separator:aa669a113d3ee23c506b97949f740b1cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3985503e0bc5adaeba09484e723378c6"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConnectedComponentsFinder.html#a3985503e0bc5adaeba09484e723378c6">ConnectedComponentsFinder</a> (const <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a> &amp;)=delete</td></tr>
<tr class="separator:a3985503e0bc5adaeba09484e723378c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a21da7363443c34ad00c529fae4b3b3e2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConnectedComponentsFinder.html#a21da7363443c34ad00c529fae4b3b3e2">operator=</a> (const <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a> &amp;)=delete</td></tr>
<tr class="separator:a21da7363443c34ad00c529fae4b3b3e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93b2c753675c77bfdbc0c33eb582380b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConnectedComponentsFinder.html#a93b2c753675c77bfdbc0c33eb582380b">AddNode</a> (T node)</td></tr>
<tr class="memdesc:a93b2c753675c77bfdbc0c33eb582380b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds a node in the graph. <a href="#a93b2c753675c77bfdbc0c33eb582380b">More...</a><br /></td></tr>
<tr class="separator:a93b2c753675c77bfdbc0c33eb582380b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a77a24beaed190e2f3a0d12662a65b18a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConnectedComponentsFinder.html#a77a24beaed190e2f3a0d12662a65b18a">AddEdge</a> (T node1, T node2)</td></tr>
<tr class="memdesc:a77a24beaed190e2f3a0d12662a65b18a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds an edge in the graph. <a href="#a77a24beaed190e2f3a0d12662a65b18a">More...</a><br /></td></tr>
<tr class="separator:a77a24beaed190e2f3a0d12662a65b18a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67dc34888511ab5b90b7389c90dbc1f8"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConnectedComponentsFinder.html#a67dc34888511ab5b90b7389c90dbc1f8">Connected</a> (T node1, T node2)</td></tr>
<tr class="memdesc:a67dc34888511ab5b90b7389c90dbc1f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true iff both nodes are in the same connected component. <a href="#a67dc34888511ab5b90b7389c90dbc1f8">More...</a><br /></td></tr>
<tr class="separator:a67dc34888511ab5b90b7389c90dbc1f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a173636e3dce11a27f2f7121e01a563"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConnectedComponentsFinder.html#a7a173636e3dce11a27f2f7121e01a563">GetSize</a> (T node)</td></tr>
<tr class="memdesc:a7a173636e3dce11a27f2f7121e01a563"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds the connected component containing a node, and returns the total number of nodes in that component. <a href="#a7a173636e3dce11a27f2f7121e01a563">More...</a><br /></td></tr>
<tr class="separator:a7a173636e3dce11a27f2f7121e01a563"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9eaa06cffceda90c1d44f550ad3459f3"><td class="memItemLeft" align="right" valign="top">std::vector&lt; std::vector&lt; T &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConnectedComponentsFinder.html#a9eaa06cffceda90c1d44f550ad3459f3">FindConnectedComponents</a> ()</td></tr>
<tr class="memdesc:a9eaa06cffceda90c1d44f550ad3459f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds all the connected components and assigns them to components. <a href="#a9eaa06cffceda90c1d44f550ad3459f3">More...</a><br /></td></tr>
<tr class="separator:a9eaa06cffceda90c1d44f550ad3459f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f7b2f745e4c87bcaafec8fa295bfa91"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConnectedComponentsFinder.html#a7f7b2f745e4c87bcaafec8fa295bfa91">FindConnectedComponents</a> (std::vector&lt; typename internal::ConnectedComponentsTypeHelper&lt; T, CompareOrHashT &gt;::Set &gt; *components)</td></tr>
<tr class="separator:a7f7b2f745e4c87bcaafec8fa295bfa91"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a30350bb98f0e1f7ae47ec1292d253b52"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConnectedComponentsFinder.html#a30350bb98f0e1f7ae47ec1292d253b52">GetNumberOfComponents</a> () const</td></tr>
<tr class="memdesc:a30350bb98f0e1f7ae47ec1292d253b52"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current number of connected components. <a href="#a30350bb98f0e1f7ae47ec1292d253b52">More...</a><br /></td></tr>
<tr class="separator:a30350bb98f0e1f7ae47ec1292d253b52"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a350a0a0790e558f619478ce97c8f2ae7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConnectedComponentsFinder.html#a350a0a0790e558f619478ce97c8f2ae7">GetNumberOfNodes</a> () const</td></tr>
<tr class="memdesc:a350a0a0790e558f619478ce97c8f2ae7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current number of added distinct nodes. <a href="#a350a0a0790e558f619478ce97c8f2ae7">More...</a><br /></td></tr>
<tr class="separator:a350a0a0790e558f619478ce97c8f2ae7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename T, typename CompareOrHashT = std::less&lt;T&gt;&gt;<br />
class ConnectedComponentsFinder&lt; T, CompareOrHashT &gt;</h3>
<p>Usage: ConnectedComponentsFinder&lt;MyNodeType&gt; cc; cc.AddNode(node1); cc.AddNode(node2); cc.AddEdge(node1, node2); ... </p>
<p>repeating, adding nodes and edges as needed. Adding an edge will automatically also add the two nodes at its ends, if they haven't already been added. std::vector&lt;std::set&lt;MyNodeType&gt; &gt; components; cc.FindConnectedComponents(&amp;components); Each entry in components now contains all the nodes in a single connected component.</p>
<p>Usage with flat_hash_set: using ConnectedComponentType = flat_hash_set&lt;MyNodeType&gt;; <a class="el" href="classConnectedComponentsFinder.html" title="Usage: ConnectedComponentsFinder&lt;MyNodeType&gt; cc; cc.AddNode(node1); cc.AddNode(node2); cc....">ConnectedComponentsFinder</a>&lt;ConnectedComponentType::key_type, ConnectedComponentType::hasher&gt; cc; ... std::vector&lt;ConnectedComponentType&gt; components; cc.FindConnectedComponents(&amp;components);</p>
<p>If you want to, you can continue adding nodes and edges after calling FindConnectedComponents, then call it again later.</p>
<p>If your node type isn't STL-friendly, then you can use pointers to it instead: ConnectedComponentsFinder&lt;MySTLUnfriendlyNodeType*&gt; cc; cc.AddNode(&amp;node1); ... and so on... Of course, in this usage, the connected components finder retains these pointers through its lifetime (though it doesn't dereference them). </p>
<p class="definition">Definition at line <a class="el" href="connected__components_8h_source.html#l00189">189</a> of file <a class="el" href="connected__components_8h_source.html">connected_components.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="aa669a113d3ee23c506b97949f740b1cc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa669a113d3ee23c506b97949f740b1cc">&#9670;&nbsp;</a></span>ConnectedComponentsFinder() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename CompareOrHashT = std::less&lt;T&gt;&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt;::<a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a> </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Constructs a connected components finder. </p>
<p class="definition">Definition at line <a class="el" href="connected__components_8h_source.html#l00192">192</a> of file <a class="el" href="connected__components_8h_source.html">connected_components.h</a>.</p>
</div>
</div>
<a id="a3985503e0bc5adaeba09484e723378c6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3985503e0bc5adaeba09484e723378c6">&#9670;&nbsp;</a></span>ConnectedComponentsFinder() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename CompareOrHashT = std::less&lt;T&gt;&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt;::<a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a> </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt; &amp;&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">delete</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a77a24beaed190e2f3a0d12662a65b18a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a77a24beaed190e2f3a0d12662a65b18a">&#9670;&nbsp;</a></span>AddEdge()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename CompareOrHashT = std::less&lt;T&gt;&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt;::AddEdge </td>
<td>(</td>
<td class="paramtype">T&#160;</td>
<td class="paramname"><em>node1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">T&#160;</td>
<td class="paramname"><em>node2</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Adds an edge in the graph. </p>
<p>Also adds both endpoint nodes as necessary. It is not an error to add the same edge twice. Self-edges are OK too. </p>
<p class="definition">Definition at line <a class="el" href="connected__components_8h_source.html#l00204">204</a> of file <a class="el" href="connected__components_8h_source.html">connected_components.h</a>.</p>
</div>
</div>
<a id="a93b2c753675c77bfdbc0c33eb582380b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a93b2c753675c77bfdbc0c33eb582380b">&#9670;&nbsp;</a></span>AddNode()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename CompareOrHashT = std::less&lt;T&gt;&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt;::AddNode </td>
<td>(</td>
<td class="paramtype">T&#160;</td>
<td class="paramname"><em>node</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Adds a node in the graph. </p>
<p>It is OK to add the same node more than once; additions after the first have no effect. </p>
<p class="definition">Definition at line <a class="el" href="connected__components_8h_source.html#l00200">200</a> of file <a class="el" href="connected__components_8h_source.html">connected_components.h</a>.</p>
</div>
</div>
<a id="a67dc34888511ab5b90b7389c90dbc1f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a67dc34888511ab5b90b7389c90dbc1f8">&#9670;&nbsp;</a></span>Connected()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename CompareOrHashT = std::less&lt;T&gt;&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt;::Connected </td>
<td>(</td>
<td class="paramtype">T&#160;</td>
<td class="paramname"><em>node1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">T&#160;</td>
<td class="paramname"><em>node2</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true iff both nodes are in the same connected component. </p>
<p>Returns false if either node has not been already added with AddNode. </p>
<p class="definition">Definition at line <a class="el" href="connected__components_8h_source.html#l00211">211</a> of file <a class="el" href="connected__components_8h_source.html">connected_components.h</a>.</p>
</div>
</div>
<a id="a9eaa06cffceda90c1d44f550ad3459f3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9eaa06cffceda90c1d44f550ad3459f3">&#9670;&nbsp;</a></span>FindConnectedComponents() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename CompareOrHashT = std::less&lt;T&gt;&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;std::vector&lt;T&gt; &gt; <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt;::FindConnectedComponents </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Finds all the connected components and assigns them to components. </p>
<p>Components are ordered in the same way nodes were added, i.e. if node 'b' was added before node 'c', then either:</p><ul>
<li>'c' belongs to the same component as a node 'a' added before 'b', or</li>
<li>the component for 'c' comes after the one for 'b'. There are two versions:</li>
<li>The first one returns the result, and stores each component in a vector. This is the preferred version.</li>
<li>The second one populates the result, and stores each component in a set. </li>
</ul>
<p class="definition">Definition at line <a class="el" href="connected__components_8h_source.html#l00232">232</a> of file <a class="el" href="connected__components_8h_source.html">connected_components.h</a>.</p>
</div>
</div>
<a id="a7f7b2f745e4c87bcaafec8fa295bfa91"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7f7b2f745e4c87bcaafec8fa295bfa91">&#9670;&nbsp;</a></span>FindConnectedComponents() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename CompareOrHashT = std::less&lt;T&gt;&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt;::FindConnectedComponents </td>
<td>(</td>
<td class="paramtype">std::vector&lt; typename internal::ConnectedComponentsTypeHelper&lt; T, CompareOrHashT &gt;::Set &gt; *&#160;</td>
<td class="paramname"><em>components</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="connected__components_8h_source.html#l00240">240</a> of file <a class="el" href="connected__components_8h_source.html">connected_components.h</a>.</p>
</div>
</div>
<a id="a30350bb98f0e1f7ae47ec1292d253b52"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a30350bb98f0e1f7ae47ec1292d253b52">&#9670;&nbsp;</a></span>GetNumberOfComponents()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename CompareOrHashT = std::less&lt;T&gt;&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt;::GetNumberOfComponents </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the current number of connected components. </p>
<p>This number can change as the new nodes or edges are added. </p>
<p class="definition">Definition at line <a class="el" href="connected__components_8h_source.html#l00253">253</a> of file <a class="el" href="connected__components_8h_source.html">connected_components.h</a>.</p>
</div>
</div>
<a id="a350a0a0790e558f619478ce97c8f2ae7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a350a0a0790e558f619478ce97c8f2ae7">&#9670;&nbsp;</a></span>GetNumberOfNodes()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename CompareOrHashT = std::less&lt;T&gt;&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt;::GetNumberOfNodes </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the current number of added distinct nodes. </p>
<p>This includes nodes added explicitly via the calls to <a class="el" href="classConnectedComponentsFinder.html#a93b2c753675c77bfdbc0c33eb582380b" title="Adds a node in the graph.">AddNode()</a> method and implicitly via the calls to <a class="el" href="classConnectedComponentsFinder.html#a77a24beaed190e2f3a0d12662a65b18a" title="Adds an edge in the graph.">AddEdge()</a> method. Nodes that were added several times only count once. </p>
<p class="definition">Definition at line <a class="el" href="connected__components_8h_source.html#l00261">261</a> of file <a class="el" href="connected__components_8h_source.html">connected_components.h</a>.</p>
</div>
</div>
<a id="a7a173636e3dce11a27f2f7121e01a563"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a173636e3dce11a27f2f7121e01a563">&#9670;&nbsp;</a></span>GetSize()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename CompareOrHashT = std::less&lt;T&gt;&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt;::GetSize </td>
<td>(</td>
<td class="paramtype">T&#160;</td>
<td class="paramname"><em>node</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Finds the connected component containing a node, and returns the total number of nodes in that component. </p>
<p>Returns zero iff the node has not been already added with AddNode. </p>
<p class="definition">Definition at line <a class="el" href="connected__components_8h_source.html#l00219">219</a> of file <a class="el" href="connected__components_8h_source.html">connected_components.h</a>.</p>
</div>
</div>
<a id="a21da7363443c34ad00c529fae4b3b3e2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a21da7363443c34ad00c529fae4b3b3e2">&#9670;&nbsp;</a></span>operator=()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename CompareOrHashT = std::less&lt;T&gt;&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&amp; <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt;::operator= </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classConnectedComponentsFinder.html">ConnectedComponentsFinder</a>&lt; T, CompareOrHashT &gt; &amp;&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">delete</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="connected__components_8h_source.html">connected_components.h</a></li>
</ul>
</div><!-- contents -->
</div>
<div id="footer-container">
<div id="footer">
</div>
</div>
</body>
</html>