mirror of
https://github.com/TheAlgorithms/C-Plus-Plus.git
synced 2026-03-21 20:31:43 +08:00
475 lines
32 KiB
HTML
475 lines
32 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
|
<meta name="generator" content="Doxygen 1.9.6"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>Algorithms_in_C++: Trie Class Reference</title>
|
|
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="../../jquery.js"></script>
|
|
<script type="text/javascript" src="../../dynsections.js"></script>
|
|
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="../../resize.js"></script>
|
|
<script type="text/javascript" src="../../navtreedata.js"></script>
|
|
<script type="text/javascript" src="../../navtree.js"></script>
|
|
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="../../search/searchdata.js"></script>
|
|
<script type="text/javascript" src="../../search/search.js"></script>
|
|
<script type="text/x-mathjax-config">
|
|
MathJax.Hub.Config({
|
|
extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
|
|
jax: ["input/TeX","output/HTML-CSS"],
|
|
});
|
|
</script>
|
|
<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML/MathJax.js"></script>
|
|
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr id="projectrow">
|
|
<td id="projectalign">
|
|
<div id="projectname">Algorithms_in_C++<span id="projectnumber"> 1.0.0</span>
|
|
</div>
|
|
<div id="projectbrief">Set of algorithms implemented in C++.</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.9.6 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript" src="../../menudata.js"></script>
|
|
<script type="text/javascript" src="../../menu.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function() {
|
|
initMenu('../../',true,false,'search.php','Search');
|
|
$(document).ready(function() { init_search(); });
|
|
});
|
|
/* @license-end */
|
|
</script>
|
|
<div id="main-nav"></div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(document).ready(function(){initNavTree('dd/d2f/class_trie.html','../../'); initResizable(); });
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<div id="MSearchResults">
|
|
<div class="SRPage">
|
|
<div id="SRIndex">
|
|
<div id="SRResults"></div>
|
|
<div class="SRStatus" id="Loading">Loading...</div>
|
|
<div class="SRStatus" id="Searching">Searching...</div>
|
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="header">
|
|
<div class="summary">
|
|
<a href="#nested-classes">Classes</a> |
|
|
<a href="#pub-methods">Public Member Functions</a> |
|
|
<a href="#pri-methods">Private Member Functions</a> |
|
|
<a href="#pri-static-methods">Static Private Member Functions</a> |
|
|
<a href="#pri-attribs">Private Attributes</a> |
|
|
<a href="#pri-static-attribs">Static Private Attributes</a> |
|
|
<a href="../../de/d8a/class_trie-members.html">List of all members</a> </div>
|
|
<div class="headertitle"><div class="title">Trie Class Reference</div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="dynheader">
|
|
Collaboration diagram for Trie:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d8/d61/class_trie__coll__graph.svg" width="218" height="139"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
|
</div>
|
|
<center><span class="legend">[<a target="top" href="../../graph_legend.html">legend</a>]</span></center></div>
|
|
<table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
|
|
Classes</h2></td></tr>
|
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d48/struct_trie_1_1_trie_node.html">TrieNode</a></td></tr>
|
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
|
Public Member Functions</h2></td></tr>
|
|
<tr class="memitem:a6af57e9f25d0d0a2d59eea5a4a802908"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d2f/class_trie.html#a6af57e9f25d0d0a2d59eea5a4a802908">Trie</a> ()</td></tr>
|
|
<tr class="memdesc:a6af57e9f25d0d0a2d59eea5a4a802908"><td class="mdescLeft"> </td><td class="mdescRight">constructor to initialise the root of the trie. <br /></td></tr>
|
|
<tr class="separator:a6af57e9f25d0d0a2d59eea5a4a802908"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:afd8b79959009b554e98ea7128b2886f2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d2f/class_trie.html#afd8b79959009b554e98ea7128b2886f2">insert</a> (const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> &word)</td></tr>
|
|
<tr class="separator:afd8b79959009b554e98ea7128b2886f2"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a411e77126930a0942dd7b65e96b15206"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d2f/class_trie.html#a411e77126930a0942dd7b65e96b15206">search</a> (const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> &word)</td></tr>
|
|
<tr class="separator:a411e77126930a0942dd7b65e96b15206"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a734a08b52b8ad73bdd1f36ae8348056e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d2f/class_trie.html#a734a08b52b8ad73bdd1f36ae8348056e">removeWord</a> (const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> &word)</td></tr>
|
|
<tr class="separator:a734a08b52b8ad73bdd1f36ae8348056e"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-methods" name="pri-methods"></a>
|
|
Private Member Functions</h2></td></tr>
|
|
<tr class="memitem:a26941759ecf94d67a27d4a610bc0f63d"><td class="memItemLeft" align="right" valign="top"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>< <a class="el" href="../../de/d48/struct_trie_1_1_trie_node.html">TrieNode</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d2f/class_trie.html#a26941759ecf94d67a27d4a610bc0f63d">removeWordHelper</a> (const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> &word, <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>< <a class="el" href="../../de/d48/struct_trie_1_1_trie_node.html">TrieNode</a> > curr, size_t index)</td></tr>
|
|
<tr class="separator:a26941759ecf94d67a27d4a610bc0f63d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-static-methods" name="pri-static-methods"></a>
|
|
Static Private Member Functions</h2></td></tr>
|
|
<tr class="memitem:a6d10eb1669453395d1900ebd401954fb"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d2f/class_trie.html#a6d10eb1669453395d1900ebd401954fb">hasChildren</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>< <a class="el" href="../../de/d48/struct_trie_1_1_trie_node.html">TrieNode</a> > <a class="el" href="../../d5/da1/structnode.html">node</a>)</td></tr>
|
|
<tr class="separator:a6d10eb1669453395d1900ebd401954fb"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
|
|
Private Attributes</h2></td></tr>
|
|
<tr class="memitem:a58b359fad33ca0064bd75a0d41a7b66d"><td class="memItemLeft" align="right" valign="top"><a id="a58b359fad33ca0064bd75a0d41a7b66d" name="a58b359fad33ca0064bd75a0d41a7b66d"></a>
|
|
<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>< <a class="el" href="../../de/d48/struct_trie_1_1_trie_node.html">TrieNode</a> > </td><td class="memItemRight" valign="bottom"><b>m_root</b></td></tr>
|
|
<tr class="separator:a58b359fad33ca0064bd75a0d41a7b66d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-static-attribs" name="pri-static-attribs"></a>
|
|
Static Private Attributes</h2></td></tr>
|
|
<tr class="memitem:a7c3ba4caf24378826a789848629177bd"><td class="memItemLeft" align="right" valign="top"><a id="a7c3ba4caf24378826a789848629177bd" name="a7c3ba4caf24378826a789848629177bd"></a>
|
|
static constexpr size_t </td><td class="memItemRight" valign="bottom"><b>ALPHABETS</b> = 26</td></tr>
|
|
<tr class="separator:a7c3ba4caf24378826a789848629177bd"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table>
|
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
<div class="textblock"><p>A basic implementation of trie class to store only lower-case strings. You can extend the implementation to all the ASCII characters by changing the value of @ ALPHABETS to 128. </p>
|
|
</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
|
|
<a id="a6af57e9f25d0d0a2d59eea5a4a802908" name="a6af57e9f25d0d0a2d59eea5a4a802908"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a6af57e9f25d0d0a2d59eea5a4a802908">◆ </a></span>Trie()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">Trie::Trie </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>constructor to initialise the root of the trie. </p>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 103</span>: m_root(std::make_shared<TrieNode>()) {}</div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
<h2 class="groupheader">Member Function Documentation</h2>
|
|
<a id="a6d10eb1669453395d1900ebd401954fb" name="a6d10eb1669453395d1900ebd401954fb"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a6d10eb1669453395d1900ebd401954fb">◆ </a></span>hasChildren()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">static bool Trie::hasChildren </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>< <a class="el" href="../../de/d48/struct_trie_1_1_trie_node.html">TrieNode</a> > </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 class="mlabel">static</span><span class="mlabel">private</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>Function to check if a node has some children which can form words. </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">node</td><td>whose character array of pointers need to be checked for children. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd><code>true</code> if a child is found </dd>
|
|
<dd>
|
|
<code>false</code> if a child is not found </dd></dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 41</span> {</div>
|
|
<div class="line"><span class="lineno"> 42</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < ALPHABETS; i++) {</div>
|
|
<div class="line"><span class="lineno"> 43</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>->character[i]) {</div>
|
|
<div class="line"><span class="lineno"> 44</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
<div class="line"><span class="lineno"> 45</span> }</div>
|
|
<div class="line"><span class="lineno"> 46</span> }</div>
|
|
<div class="line"><span class="lineno"> 47</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><span class="lineno"> 48</span> }</div>
|
|
<div class="ttc" id="astructnode_html"><div class="ttname"><a href="../../d5/da1/structnode.html">node</a></div><div class="ttdef"><b>Definition:</b> avltree.cpp:13</div></div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
<a id="afd8b79959009b554e98ea7128b2886f2" name="afd8b79959009b554e98ea7128b2886f2"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#afd8b79959009b554e98ea7128b2886f2">◆ </a></span>insert()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void Trie::insert </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> & </td>
|
|
<td class="paramname"><em>word</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>Insert a word into the trie. </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">word</td><td>which needs to be inserted into the string. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 109</span> {</div>
|
|
<div class="line"><span class="lineno"> 110</span> <span class="keyword">auto</span> curr = m_root;</div>
|
|
<div class="line"><span class="lineno"> 111</span> <span class="keywordflow">for</span> (<span class="keywordtype">char</span> ch : word) {</div>
|
|
<div class="line"><span class="lineno"> 112</span> <span class="keywordtype">size_t</span> index = ch - <span class="charliteral">'a'</span>;</div>
|
|
<div class="line"><span class="lineno"> 113</span> </div>
|
|
<div class="line"><span class="lineno"> 114</span> <span class="comment">// if a node for current word is not already present in trie, create</span></div>
|
|
<div class="line"><span class="lineno"> 115</span> <span class="comment">// a new node for it.</span></div>
|
|
<div class="line"><span class="lineno"> 116</span> <span class="keywordflow">if</span> (!curr->character[index]) {</div>
|
|
<div class="line"><span class="lineno"> 117</span> curr->character[index] = std::make_shared<TrieNode>();</div>
|
|
<div class="line"><span class="lineno"> 118</span> }</div>
|
|
<div class="line"><span class="lineno"> 119</span> </div>
|
|
<div class="line"><span class="lineno"> 120</span> curr = curr->character[index];</div>
|
|
<div class="line"><span class="lineno"> 121</span> }</div>
|
|
<div class="line"><span class="lineno"> 122</span> curr->isEndOfWord = <span class="keyword">true</span>;</div>
|
|
<div class="line"><span class="lineno"> 123</span> }</div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
<a id="a734a08b52b8ad73bdd1f36ae8348056e" name="a734a08b52b8ad73bdd1f36ae8348056e"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a734a08b52b8ad73bdd1f36ae8348056e">◆ </a></span>removeWord()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void Trie::removeWord </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> & </td>
|
|
<td class="paramname"><em>word</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">
|
|
<div class="fragment"><div class="line"><span class="lineno"> 148</span> {</div>
|
|
<div class="line"><span class="lineno"> 149</span> m_root = <a class="code hl_function" href="../../dd/d2f/class_trie.html#a26941759ecf94d67a27d4a610bc0f63d">removeWordHelper</a>(word, m_root, 0);</div>
|
|
<div class="line"><span class="lineno"> 150</span> }</div>
|
|
<div class="ttc" id="aclass_trie_html_a26941759ecf94d67a27d4a610bc0f63d"><div class="ttname"><a href="../../dd/d2f/class_trie.html#a26941759ecf94d67a27d4a610bc0f63d">Trie::removeWordHelper</a></div><div class="ttdeci">std::shared_ptr< TrieNode > removeWordHelper(const std::string &word, std::shared_ptr< TrieNode > curr, size_t index)</div><div class="ttdef"><b>Definition:</b> trie_modern.cpp:64</div></div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
<a id="a26941759ecf94d67a27d4a610bc0f63d" name="a26941759ecf94d67a27d4a610bc0f63d"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a26941759ecf94d67a27d4a610bc0f63d">◆ </a></span>removeWordHelper()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>< <a class="el" href="../../de/d48/struct_trie_1_1_trie_node.html">TrieNode</a> > Trie::removeWordHelper </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> & </td>
|
|
<td class="paramname"><em>word</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>< <a class="el" href="../../de/d48/struct_trie_1_1_trie_node.html">TrieNode</a> > </td>
|
|
<td class="paramname"><em>curr</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">size_t </td>
|
|
<td class="paramname"><em>index</em> </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 class="mlabel">private</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>A recursive helper function to remove a word from the trie. First, it recursively traverses to the location of last character of word in the trie. However, if the word is not found, the function returns a runtime error. Upon successfully reaching the last character of word in trie, if sets the isEndOfWord to false and deletes the node if and only if it has no children, else it returns the current node. </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">word</td><td>is the string which needs to be removed from trie. </td></tr>
|
|
<tr><td class="paramname">curr</td><td>is the current node we are at. </td></tr>
|
|
<tr><td class="paramname">index</td><td>is the index of the @word we are at. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>if current node has childern, it returns @ curr, else it returns nullptr. </dd></dl>
|
|
<dl class="exception"><dt>Exceptions</dt><dd>
|
|
<table class="exception">
|
|
<tr><td class="paramname">a</td><td>runtime error in case @ word is not found in the trie. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 66</span> {</div>
|
|
<div class="line"><span class="lineno"> 67</span> <span class="keywordflow">if</span> (word.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">size</a>() == index) {</div>
|
|
<div class="line"><span class="lineno"> 68</span> <span class="keywordflow">if</span> (curr->isEndOfWord) {</div>
|
|
<div class="line"><span class="lineno"> 69</span> curr->isEndOfWord = <span class="keyword">false</span>;</div>
|
|
<div class="line"><span class="lineno"> 70</span> }</div>
|
|
<div class="line"><span class="lineno"> 71</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="../../dd/d2f/class_trie.html#a6d10eb1669453395d1900ebd401954fb">hasChildren</a>(curr)) {</div>
|
|
<div class="line"><span class="lineno"> 72</span> <span class="keywordflow">return</span> curr;</div>
|
|
<div class="line"><span class="lineno"> 73</span> }</div>
|
|
<div class="line"><span class="lineno"> 74</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
<div class="line"><span class="lineno"> 75</span> }</div>
|
|
<div class="line"><span class="lineno"> 76</span> </div>
|
|
<div class="line"><span class="lineno"> 77</span> <span class="keywordtype">size_t</span> idx = word[index] - <span class="charliteral">'a'</span>;</div>
|
|
<div class="line"><span class="lineno"> 78</span> </div>
|
|
<div class="line"><span class="lineno"> 79</span> <span class="comment">// Throw a runtime error in case the user enters a word which is not</span></div>
|
|
<div class="line"><span class="lineno"> 80</span> <span class="comment">// present in the trie.</span></div>
|
|
<div class="line"><span class="lineno"> 81</span> <span class="keywordflow">if</span> (!curr->character[idx]) {</div>
|
|
<div class="line"><span class="lineno"> 82</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/error/runtime_error.html">std::runtime_error</a>(<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/move.html">std::move</a>(<a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a>(<span class="stringliteral">"Word not found."</span>)));</div>
|
|
<div class="line"><span class="lineno"> 83</span> }</div>
|
|
<div class="line"><span class="lineno"> 84</span> </div>
|
|
<div class="line"><span class="lineno"> 85</span> curr->character[idx] =</div>
|
|
<div class="line"><span class="lineno"> 86</span> <a class="code hl_function" href="../../dd/d2f/class_trie.html#a26941759ecf94d67a27d4a610bc0f63d">removeWordHelper</a>(word, curr->character[idx], index + 1);</div>
|
|
<div class="line"><span class="lineno"> 87</span> </div>
|
|
<div class="line"><span class="lineno"> 88</span> <span class="comment">// This if condition checks if the node has some childern.</span></div>
|
|
<div class="line"><span class="lineno"> 89</span> <span class="comment">// The 1st if check, i.e. (curr->character[idx]) is checked specifically</span></div>
|
|
<div class="line"><span class="lineno"> 90</span> <span class="comment">// because if the older string is a prefix of some other string, then,</span></div>
|
|
<div class="line"><span class="lineno"> 91</span> <span class="comment">// there would be no need to check all 26 characters. Example- str1 =</span></div>
|
|
<div class="line"><span class="lineno"> 92</span> <span class="comment">// abbey, str2 = abbex and we want to delete string "abbey", then in</span></div>
|
|
<div class="line"><span class="lineno"> 93</span> <span class="comment">// this case, there would be no need to check all characters for the</span></div>
|
|
<div class="line"><span class="lineno"> 94</span> <span class="comment">// chars a,b,b.</span></div>
|
|
<div class="line"><span class="lineno"> 95</span> <span class="keywordflow">if</span> (curr->character[idx] || <a class="code hl_function" href="../../dd/d2f/class_trie.html#a6d10eb1669453395d1900ebd401954fb">hasChildren</a>(curr)) {</div>
|
|
<div class="line"><span class="lineno"> 96</span> <span class="keywordflow">return</span> curr;</div>
|
|
<div class="line"><span class="lineno"> 97</span> }</div>
|
|
<div class="line"><span class="lineno"> 98</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
<div class="line"><span class="lineno"> 99</span> }</div>
|
|
<div class="ttc" id="abasic_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div></div>
|
|
<div class="ttc" id="aclass_trie_html_a6d10eb1669453395d1900ebd401954fb"><div class="ttname"><a href="../../dd/d2f/class_trie.html#a6d10eb1669453395d1900ebd401954fb">Trie::hasChildren</a></div><div class="ttdeci">static bool hasChildren(std::shared_ptr< TrieNode > node)</div><div class="ttdef"><b>Definition:</b> trie_modern.cpp:41</div></div>
|
|
<div class="ttc" id="amove_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/move.html">std::move</a></div><div class="ttdeci">T move(T... args)</div></div>
|
|
<div class="ttc" id="aruntime_error_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/error/runtime_error.html">std::runtime_error</a></div></div>
|
|
<div class="ttc" id="asize_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">std::string::size</a></div><div class="ttdeci">T size(T... args)</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../dd/d2f/class_trie_a26941759ecf94d67a27d4a610bc0f63d_cgraph.svg" width="343" height="135"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a411e77126930a0942dd7b65e96b15206" name="a411e77126930a0942dd7b65e96b15206"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a411e77126930a0942dd7b65e96b15206">◆ </a></span>search()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">bool Trie::search </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> & </td>
|
|
<td class="paramname"><em>word</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>Search if a word is present in trie or not. </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">word</td><td>which is needed to be searched in the trie. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>True if the word is found in trie and isEndOfWord is set to true. </dd>
|
|
<dd>
|
|
False if word is not found in trie or isEndOfWord is set to false. </dd></dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 132</span> {</div>
|
|
<div class="line"><span class="lineno"> 133</span> <span class="keyword">auto</span> curr = m_root;</div>
|
|
<div class="line"><span class="lineno"> 134</span> <span class="keywordflow">for</span> (<span class="keywordtype">char</span> ch : word) {</div>
|
|
<div class="line"><span class="lineno"> 135</span> <span class="keywordtype">size_t</span> index = ch - <span class="charliteral">'a'</span>;</div>
|
|
<div class="line"><span class="lineno"> 136</span> </div>
|
|
<div class="line"><span class="lineno"> 137</span> <span class="comment">// if any node for a character is not found, then return that the</span></div>
|
|
<div class="line"><span class="lineno"> 138</span> <span class="comment">// word cannot be formed.</span></div>
|
|
<div class="line"><span class="lineno"> 139</span> <span class="keywordflow">if</span> (!curr->character[index]) {</div>
|
|
<div class="line"><span class="lineno"> 140</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><span class="lineno"> 141</span> }</div>
|
|
<div class="line"><span class="lineno"> 142</span> curr = curr->character[index];</div>
|
|
<div class="line"><span class="lineno"> 143</span> }</div>
|
|
<div class="line"><span class="lineno"> 144</span> <span class="keywordflow">return</span> curr->isEndOfWord;</div>
|
|
<div class="line"><span class="lineno"> 145</span> }</div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
<hr/>The documentation for this class was generated from the following file:<ul>
|
|
<li>data_structures/<a class="el" href="../../dc/d93/trie__modern_8cpp.html">trie_modern.cpp</a></li>
|
|
</ul>
|
|
</div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="../../dd/d2f/class_trie.html">Trie</a></li>
|
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.6 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|