﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-C小加-随笔分类-模板</title><link>http://www.cppblog.com/cxiaojia/category/19021.html</link><description>厚德 博学 求真 至善
The bright moon and breeze</description><language>zh-cn</language><lastBuildDate>Sat, 15 Sep 2012 16:29:42 GMT</lastBuildDate><pubDate>Sat, 15 Sep 2012 16:29:42 GMT</pubDate><ttl>60</ttl><item><title>优先队列（二叉堆）模板</title><link>http://www.cppblog.com/cxiaojia/archive/2012/09/15/190272.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Sat, 15 Sep 2012 06:40:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/09/15/190272.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/190272.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/09/15/190272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/190272.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/190272.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">template</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;T,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;MAX</span><span style="color: #000000; ">=</span><span style="color: #000000; ">100003</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;BinaryHeap<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;Size;<br />&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;Tarr;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;BinaryHeap();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;insert(T&nbsp;x);<br />&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;deleteMin();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">~</span><span style="color: #000000; ">BinaryHeap();<br />};<br /><br />template</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;T,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;MAX</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />BinaryHeap</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T,MAX</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::BinaryHeap()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Tarr</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;T[MAX</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(Tarr</span><span style="color: #000000; ">==</span><span style="color: #000000; ">NULL)&nbsp;{cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">创建数组失败</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Size</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br />template</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;T,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;MAX</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;BinaryHeap</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T,MAX</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::insert(T&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">Size;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(Size</span><span style="color: #000000; ">==</span><span style="color: #000000; ">MAX)&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">Size;Tarr[i</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">x;i</span><span style="color: #000000; ">/=</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tarr[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">Tarr[i</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;Tarr[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">x;<br />}<br />template</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;T,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;MAX</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />T&nbsp;BinaryHeap</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T,MAX</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::deleteMin()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(Size</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;minem</span><span style="color: #000000; ">=</span><span style="color: #000000; ">Tarr[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;lastem</span><span style="color: #000000; ">=</span><span style="color: #000000; ">Tarr[Size</span><span style="color: #000000; ">--</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,child;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">Size;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">child)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(child</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">Size</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">Tarr[child</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Tarr[child])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">child;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(lastem</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">Tarr[child])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tarr[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">Tarr[child];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Tarr[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">lastem;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;minem;<br />}<br /><br />template</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;T,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;MAX</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />BinaryHeap</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T,MAX</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::</span><span style="color: #000000; ">~</span><span style="color: #000000; ">BinaryHeap()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;Tarr;<br /><br />}<br /><br /></span></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/190272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-09-15 14:40 <a href="http://www.cppblog.com/cxiaojia/archive/2012/09/15/190272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>哈希模板</title><link>http://www.cppblog.com/cxiaojia/archive/2012/09/12/190436.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Wed, 12 Sep 2012 12:06:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/09/12/190436.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/190436.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/09/12/190436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/190436.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/190436.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;MAX=1000003;<br />template&nbsp;&lt;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br /><span style="color: #0000FF; ">class</span>&nbsp;hash<br />{<br /><span style="color: #0000FF; ">private</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;next[MAX];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;head[MAX];<br />&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;key[MAX];<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;hash();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;search(T&nbsp;x);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;push(T&nbsp;x);<br /><br /><br />};<br />template&nbsp;&lt;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br />hash&lt;T&gt;::hash()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pos=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(next,-1,<span style="color: #0000FF; ">sizeof</span>(next));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(head,-1,<span style="color: #0000FF; ">sizeof</span>(head));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">memset(key,-1,sizeof(key));</span><span style="color: #008000; "><br /></span>}<br />template&nbsp;&lt;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br />inline&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;hash&lt;T&gt;::search(<span style="color: #0000FF; ">const</span>&nbsp;T&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;temp=x%MAX;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t=head[temp];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(t!=-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(key[t]==x)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=next[t];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br />template&nbsp;&lt;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br />inline&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;hash&lt;T&gt;::push(<span style="color: #0000FF; ">const</span>&nbsp;T&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;temp=x%MAX;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(head[temp]!=-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next[pos]=head[temp];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;head[temp]=pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;key[pos]=x;<br />&nbsp;&nbsp;&nbsp;&nbsp;pos++;<br />}</div><img src ="http://www.cppblog.com/cxiaojia/aggbug/190436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-09-12 20:06 <a href="http://www.cppblog.com/cxiaojia/archive/2012/09/12/190436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hash_map哈希映照容器的实现</title><link>http://www.cppblog.com/cxiaojia/archive/2012/04/18/171901.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Wed, 18 Apr 2012 12:18:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/04/18/171901.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/171901.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/04/18/171901.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/171901.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/171901.html</trackback:ping><description><![CDATA[<div><p>hash_map<span style="font-family: 宋体;">，顾名思义，就是利用</span>hash_set<span style="font-family:宋体;">存储结构的写</span>map<span style="font-family:宋体;">映照容器，普通的</span>map<span style="font-family:宋体;">用的是红黑树存储结构写的。元素的检索时间对比，</span>hash_set<span style="font-family:宋体;">近似为</span>O(1)<span style="font-family:宋体;">，红黑树为</span>O(logn)<span style="font-family:宋体;">。</span>Hash_map<span style="font-family:宋体;">的空间开销要比</span>map <span style="font-family:宋体;">的空间开销大，尤其是我用数组模拟指针写的</span>hash_map<span style="font-family:宋体;">。</span></p>  <p><span style="font-family:宋体;">所以，如果有必要采取映射结构的时候，能用</span>hash_map<span style="font-family:宋体;">就别用</span>map<span style="font-family:宋体;">。</span></p>  <p><span style="font-family:宋体;">需要注意的是，</span>hash_map<span style="font-family:宋体;">遍历出来的元素不是有序的。</span></p>  <p>Hash_map<span style="font-family: 宋体;">和普通</span>hash_set<span style="font-family:宋体;">相比的话，</span>hash_map<span style="font-family:宋体;">比</span>hash_set<span style="font-family:宋体;">多了一张</span>value<span style="font-family:宋体;">表，也就是映射表。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">下面是</span>hash_map<span style="font-family:宋体;">的模板，和</span>hash_set<span style="font-family: 宋体; ">的模板差不多。<br /><br /></span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->template&lt;<span style="color: #0000FF; ">class</span>&nbsp;KeyType,<span style="color: #0000FF; ">int</span>&nbsp;MaxHash&gt;<br /><span style="color: #0000FF; ">struct</span>&nbsp;HashFunction<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;<span style="color: #0000FF; ">operator</span>()(<span style="color: #0000FF; ">const</span>&nbsp;KeyType&amp;&nbsp;key)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;h=key%MaxHash;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(h&lt;0)&nbsp;h+=MaxHash;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;h;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br /><br />template&lt;<span style="color: #0000FF; ">class</span>&nbsp;KeyType,<span style="color: #0000FF; ">class</span>&nbsp;ValueType,<span style="color: #0000FF; ">int</span>&nbsp;KeyContain,<span style="color: #0000FF; ">int</span>&nbsp;MaxHash,<span style="color: #0000FF; ">class</span>&nbsp;HashFun=HashFunction&lt;KeyType,MaxHash&gt;&nbsp;&gt;<br /><span style="color: #0000FF; ">class</span>&nbsp;HashMap<br />{<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;HashMap():hashfun(){Clear();}<br />&nbsp;&nbsp;&nbsp;&nbsp;ValueType&amp;&nbsp;<span style="color: #0000FF; ">operator</span>[](<span style="color: #0000FF; ">const</span>&nbsp;KeyType&amp;&nbsp;key)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;h=hashfun(key);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pos=head[h];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(;pos!=0;pos=next[pos])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(keys[pos]==key)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;values[pos];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next[++top]=head[h];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head[h]=top;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keys[top]=key;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[top]=ValueType();<span style="color: #008000; ">//</span><span style="color: #008000; ">初始化</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++sz;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;values[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Clear()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(head,0,<span style="color: #0000FF; ">sizeof</span>(head));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(next,0,(top+1)*<span style="color: #0000FF; ">sizeof</span>(<span style="color: #0000FF; ">int</span>));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sz=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;size()&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;{<span style="color: #0000FF; ">return</span>&nbsp;sz;}<br /><br /><span style="color: #0000FF; ">private</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;sz;<br />&nbsp;&nbsp;&nbsp;&nbsp;HashFun&nbsp;hashfun;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;head[MaxHash];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;next[KeyContain];<br />&nbsp;&nbsp;&nbsp;&nbsp;KeyType&nbsp;keys[KeyContain];<br />&nbsp;&nbsp;&nbsp;&nbsp;ValueType&nbsp;values[KeyContain];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;top;<br />};</div><p>&nbsp;</p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/171901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-04-18 20:18 <a href="http://www.cppblog.com/cxiaojia/archive/2012/04/18/171901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++任意类型转换模板</title><link>http://www.cppblog.com/cxiaojia/archive/2012/04/12/171091.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Thu, 12 Apr 2012 07:13:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/04/12/171091.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/171091.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/04/12/171091.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/171091.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/171091.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&lt;iostream&gt;<br />#include&lt;sstream&gt;<br />#include&lt;<span style="color: #0000FF; ">string</span>&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><br /><br />template&lt;<span style="color: #0000FF; ">class</span>&nbsp;out_type,<span style="color: #0000FF; ">class</span>&nbsp;in_value&gt;<br />out_type&nbsp;convert(<span style="color: #0000FF; ">const</span>&nbsp;in_value&nbsp;&amp;&nbsp;t)<br />{<br />stringstream&nbsp;stream;<br />stream&lt;&lt;t;<span style="color: #008000; ">//</span><span style="color: #008000; ">向流中传值</span><span style="color: #008000; "><br /></span>out_type&nbsp;result;<span style="color: #008000; ">//</span><span style="color: #008000; ">这里存储转换结果</span><span style="color: #008000; "><br /></span>stream&gt;&gt;result;<span style="color: #008000; ">//</span><span style="color: #008000; ">向result中写入值</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">return</span>&nbsp;result;<br />}<br /><br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;s;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cin&gt;&gt;s)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;valdou=convert&lt;<span style="color: #0000FF; ">double</span>&gt;(s);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;valint=convert&lt;<span style="color: #0000FF; ">int</span>&gt;(s);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;valdou&lt;&lt;endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;valint&lt;&lt;endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><img src ="http://www.cppblog.com/cxiaojia/aggbug/171091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-04-12 15:13 <a href="http://www.cppblog.com/cxiaojia/archive/2012/04/12/171091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>次方求模模板</title><link>http://www.cppblog.com/cxiaojia/archive/2012/04/06/170268.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Fri, 06 Apr 2012 06:51:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/04/06/170268.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/170268.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/04/06/170268.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/170268.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/170268.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->template&lt;<span style="color: #0000FF; ">class</span>&nbsp;IntType&gt;<br />inline&nbsp;IntType&nbsp;ModPow(IntType&nbsp;m,IntType&nbsp;n,IntType&nbsp;p)&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">m的n次方模p</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(n==0)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(n==1)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;m%p;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntType&nbsp;tmp=ModPow(m,n&gt;&gt;1,p);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(tmp*tmp%p)*((n%2?m:1)%p)%p;<br />}</div><img src ="http://www.cppblog.com/cxiaojia/aggbug/170268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-04-06 14:51 <a href="http://www.cppblog.com/cxiaojia/archive/2012/04/06/170268.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>