<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>yamablo &#187; Class</title>
	<atom:link href="http://yamablo.com/tag/class/feed" rel="self" type="application/rss+xml" />
	<link>http://yamablo.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 01 Aug 2010 02:53:20 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yamablo.com/tag/class/feed" />
		<item>
		<title>[C++]Hashクラス・改訂版,</title>
		<link>http://yamablo.com/2008/12/19-103002.php</link>
		<comments>http://yamablo.com/2008/12/19-103002.php#comments</comments>
		<pubDate>Fri, 19 Dec 2008 01:30:02 +0000</pubDate>
		<dc:creator>yama3</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[ゼミ]]></category>
		<category><![CDATA[ハッシュ]]></category>

		<guid isPermaLink="false">http://yamablo.com/2008/12/19-103002.php</guid>
		<description><![CDATA[かなり前に書いたハッシュのクラスファイル（http://yamablo.com/2008/11/14-005442.php）の訂正版になります。訂正版を公開するのを忘れてました。 想定は、2項目からなるデータをハッシュとして保持する状況を考えてます。2項目のうち1つはキーとなる項目で、残りの1項目は非キー項目です。 Hash.cpp #include&#160;&#60;stdio.h&#62; #include&#160;&#60;stdlib.h&#62; #include&#160;&#60;string.h&#62; #define&#160;&#160;&#160;&#160;&#160;DATA_SIZE&#160;&#160;&#160;256&#160; #define&#160;&#160;&#160;&#160;&#160;TABLE_SIZE&#160;&#160;200 //&#160;ハッシュ表に格納するデータの構造 typedef&#160;struct&#160;data&#160;{ &#160;&#160;&#160;&#160;char&#160;&#160;&#160;&#160;key[DATA_SIZE];&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;格納するキーのデータ &#160;&#160;&#160;&#160;char&#160;&#160;&#160;&#160;value[DATA_SIZE];&#160;&#160;&#160;&#160;&#160;//&#160;格納する非キーのデータ &#160;&#160;&#160;&#160;int&#160;&#160;&#160;&#160;&#160;flg;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;格納状態のフラグ }&#160;data; class&#160;Hash&#160;{ &#160;&#160;&#160;&#160;public: &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;data&#160;&#160;&#160;&#160;HashTable[TABLE_SIZE];&#160;&#160;//&#160;ハッシュ表 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&#160;&#160;&#160;&#160;&#160;collision;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;データ格納時にコリジョンが発生した回数 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&#160;&#160;&#160;&#160;&#160;stored;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;データの格納数 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;double&#160;&#160;StoredPerAll;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;データの格納率 &#160;&#160;&#160;&#160;private: &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;ハッシュ値を求める &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&#160;HashValue(&#160;char&#160;*str&#160;)&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&#160;&#160;&#160;&#160;&#160;idx;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;インデックスカウンタ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&#160;&#160;&#160;&#160;&#160;length;&#160;&#160;&#160;&#160;&#160;//&#160;文字列の長さを格納 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&#160;&#160;&#160;&#160;&#160;h&#160;=&#160;0;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;ハッシュ値を格納 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;length&#160;=&#160;strlen(&#160;str&#160;); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for(&#160;idx=0;&#160;idx&#60;length;&#160;idx++&#160;)&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;h&#160;=&#160;h&#160;*&#160;37&#160;+&#160;str[idx]; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;h&#160;=&#160;h&#160;%&#160;TABLE_SIZE; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;abs(h); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;public: &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/*&#160;****************************************** &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;*&#160;データstrの格納場所を求める &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;*&#160;もし存在しなければ、-1を返す &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;*&#160;******************************************&#160;*/ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&#160;where(&#160;char&#160;*str&#160;)&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;h; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;h&#160;=&#160;this-&#62;HashValue(&#160;str&#160;); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;該当場所のデータが空で、削除もしていないとき &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(&#160;this-&#62;HashTable[h].flg&#160;==&#160;0&#160;)&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;-1; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;ハッシュ表の該当場所をチェックし、 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;その場所から目的のデータを探す &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;while(&#160;strcmp(this-&#62;HashTable[h].key,&#160;str)!=0&#160;)&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;h++; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(&#160;h&#160;==&#160;TABLE_SIZE&#160;)&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;h&#160;=&#160;0; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;else&#160;if(&#160;h&#160;==&#160;this-&#62;HashValue(&#160;str&#160;)&#160;)&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;ハッシュ表を全て見てもなかった場合、Not&#160;Found &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;-1; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} [...]]]></description>
			<content:encoded><![CDATA[<p>かなり前に書いたハッシュのクラスファイル（<a href="http://yamablo.com/2008/11/14-005442.php">http://yamablo.com/2008/11/14-005442.php</a>）の訂正版になります。訂正版を公開するのを忘れてました。
<p>想定は、2項目からなるデータをハッシュとして保持する状況を考えてます。2項目のうち1つはキーとなる項目で、残りの1項目は非キー項目です。</p>
<p><span id="more-298"></span></p>
<h3>Hash.cpp</h3>
<ol class="sourceCode">
<li>#include&nbsp;&lt;stdio.h&gt;</li>
<li>#include&nbsp;&lt;stdlib.h&gt;</li>
<li>#include&nbsp;&lt;string.h&gt;</li>
<li></li>
<li>#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATA_SIZE&nbsp;&nbsp;&nbsp;256&nbsp;</li>
<li>#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TABLE_SIZE&nbsp;&nbsp;200</li>
<li></li>
<li><span class="comments">//&nbsp;ハッシュ表に格納するデータの構造</span></li>
<li>typedef&nbsp;struct&nbsp;data&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;key[DATA_SIZE];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;格納するキーのデータ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;value[DATA_SIZE];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;格納する非キーのデータ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flg;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;格納状態のフラグ</span></li>
<li>}&nbsp;data;</li>
<li></li>
<li>class&nbsp;Hash&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;public:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;HashTable[TABLE_SIZE];&nbsp;&nbsp;<span class="comments">//&nbsp;ハッシュ表</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collision;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;データ格納時にコリジョンが発生した回数</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stored;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;データの格納数</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;&nbsp;StoredPerAll;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;データの格納率</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;private:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;ハッシュ値を求める</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;HashValue(&nbsp;char&nbsp;*str&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idx;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;インデックスカウンタ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;文字列の長さを格納</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;ハッシュ値を格納</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;strlen(&nbsp;str&nbsp;);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;idx=0;&nbsp;idx&lt;length;&nbsp;idx++&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;h&nbsp;*&nbsp;37&nbsp;+&nbsp;str[idx];</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;h&nbsp;%&nbsp;TABLE_SIZE;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;abs(h);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;public:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">/*&nbsp;******************************************</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;データstrの格納場所を求める</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;もし存在しなければ、-1を返す</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;******************************************&nbsp;*/</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;where(&nbsp;char&nbsp;*str&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h;</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;this-&gt;HashValue(&nbsp;str&nbsp;);</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;該当場所のデータが空で、削除もしていないとき</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;this-&gt;HashTable[h].flg&nbsp;==&nbsp;0&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;ハッシュ表の該当場所をチェックし、</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;その場所から目的のデータを探す</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(&nbsp;strcmp(this-&gt;HashTable[h].key,&nbsp;str)!=0&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h++;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;h&nbsp;==&nbsp;TABLE_SIZE&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if(&nbsp;h&nbsp;==&nbsp;this-&gt;HashValue(&nbsp;str&nbsp;)&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;ハッシュ表を全て見てもなかった場合、Not&nbsp;Found</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;コンストラクタ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hash()&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;idx;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;idx=0;&nbsp;idx&lt;TABLE_SIZE;&nbsp;idx++&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;HashTable[idx].key[0]&nbsp;=&nbsp;&#8217;\0&#8242;;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;HashTable[idx].value[0]&nbsp;=&nbsp;&#8217;\0&#8242;;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;HashTable[idx].flg&nbsp;=&nbsp;0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;collision&nbsp;=&nbsp;0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;stored&nbsp;=&nbsp;0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;デストラクタ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~Hash()&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;Do&nbsp;Nothing</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">/*&nbsp;******************************************</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;ハッシュ表にデータを追加する</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;******************************************&nbsp;*/</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;Add(&nbsp;data&nbsp;str&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;ハッシュ値を格納</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;this-&gt;where(&nbsp;str.key&nbsp;)&nbsp;==&nbsp;-1&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;ハッシュ値を計算しhに保存</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;this-&gt;HashValue(&nbsp;str.key&nbsp;);</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;ハッシュ表の該当場所をチェックし、</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;衝突していれば衝突回避するようにhを設定</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(&nbsp;this-&gt;HashTable[h].flg&nbsp;==&nbsp;1&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;collision++;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h++;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;h&nbsp;==&nbsp;TABLE_SIZE&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;データをハッシュ表に追加</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(&nbsp;this-&gt;HashTable[h].key,&nbsp;str.key&nbsp;);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(&nbsp;this-&gt;HashTable[h].value,&nbsp;str.value&nbsp;);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;HashTable[h].flg&nbsp;=&nbsp;1;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;stored&nbsp;=&nbsp;this-&gt;stored&nbsp;+&nbsp;1;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;StoredPerAll&nbsp;=&nbsp;this-&gt;stored&nbsp;*&nbsp;100&nbsp;/&nbsp;TABLE_SIZE;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">/*&nbsp;******************************************</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;データstrがこのハッシュで表現された集合に含まれるか</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;@return&nbsp;&nbsp;0なら含まれない、1なら含まれる</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;******************************************&nbsp;*/</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;member(&nbsp;char&nbsp;*str&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;this-&gt;where(&nbsp;str&nbsp;)&nbsp;==&nbsp;-1&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">/*&nbsp;******************************************</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;データstrをこのハッシュで表現された集合から削除</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;もし最初から存在しなければ、何もしないで終了</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;******************************************&nbsp;*/</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;deletes(&nbsp;char&nbsp;*str&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;this-&gt;member(&nbsp;str&nbsp;)&nbsp;==&nbsp;1&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;データを削除する</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;HashTable[this-&gt;where(str)].key[0]&nbsp;=&nbsp;&#8217;\0&#8242;;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;HashTable[this-&gt;where(str)].value[0]&nbsp;=&nbsp;&#8217;\0&#8242;;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;HashTable[this-&gt;where(str)].flg&nbsp;=&nbsp;-1;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;stored&nbsp;=&nbsp;this-&gt;stored&nbsp;-&nbsp;1;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;StoredPerAll&nbsp;=&nbsp;this-&gt;stored&nbsp;*&nbsp;100&nbsp;/&nbsp;TABLE_SIZE;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">/*&nbsp;******************************************</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;ハッシュからデータを取り出す</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;******************************************&nbsp;*/</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;Get(&nbsp;char&nbsp;*keys&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idx;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;キーkeysの格納場所</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;ret;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;戻り値として返すデータ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idx&nbsp;=&nbsp;this-&gt;where(&nbsp;keys&nbsp;);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(&nbsp;ret.key,&nbsp;HashTable[idx].key&nbsp;);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(&nbsp;ret.value,&nbsp;HashTable[idx].value&nbsp;);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">/*&nbsp;******************************************</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;ハッシュの再構築</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&nbsp;*&nbsp;******************************************&nbsp;*/</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;refresh()&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idx;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;SwapTable[TABLE_SIZE];</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;データを退避用変数に格納する。</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;idx=0;&nbsp;idx&lt;TABLE_SIZE;&nbsp;idx++&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;this-&gt;HashTable[idx].flg&nbsp;==&nbsp;1&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(&nbsp;SwapTable[k].key,&nbsp;this-&gt;HashTable[idx].key&nbsp;);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(&nbsp;SwapTable[k].value,&nbsp;this-&gt;HashTable[idx].value&nbsp;);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SwapTable[k].flg&nbsp;=&nbsp;1;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k++;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;テーブルをリセットする</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;idx=0;&nbsp;idx&lt;TABLE_SIZE;&nbsp;idx++&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;HashTable[idx].flg&nbsp;=&nbsp;0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;HashTable[idx].key[0]&nbsp;=&nbsp;&#8217;\0&#8242;;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;HashTable[idx].value[0]&nbsp;=&nbsp;&#8217;\0&#8242;;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;collision&nbsp;=&nbsp;0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;stored&nbsp;=&nbsp;0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;StoredPerAll&nbsp;=&nbsp;0;</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//&nbsp;退避したデータを格納する</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;idx=0;&nbsp;idx&lt;k;&nbsp;idx++&nbsp;)&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;Add(&nbsp;SwapTable[idx]&nbsp;);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>};</li>
</ol>
<p><strong>関連記事</strong>
<ul class="similar-posts">
<li><a href="http://yamablo.com/2008/11/14-005442.php" title="[C++] Hashクラス">[C++] Hashクラス</a></li>
<li><a href="http://yamablo.com/2008/11/15-002600.php" title="ハッシュについて">ハッシュについて</a></li>
<li><a href="http://yamablo.com/2008/11/11-183734.php" title="[PHP] MySQLクラス">[PHP] MySQLクラス</a></li>
<li><a href="http://yamablo.com/2008/11/11-003903.php" title="[C++] Dimensionクラス">[C++] Dimensionクラス</a></li>
<li><a href="http://yamablo.com/2008/11/08-202822.php" title="[PHP] Queueクラス">[PHP] Queueクラス</a></li>
</ul>
<p><!-- Similar Posts took 12.727 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://yamablo.com/2008/12/19-103002.php/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yamablo.com/2008/12/19-103002.php" />
	</item>
		<item>
		<title>[C++] Hashクラス</title>
		<link>http://yamablo.com/2008/11/14-005442.php</link>
		<comments>http://yamablo.com/2008/11/14-005442.php#comments</comments>
		<pubDate>Thu, 13 Nov 2008 15:54:42 +0000</pubDate>
		<dc:creator>yama3</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[ゼミ]]></category>
		<category><![CDATA[ハッシュ]]></category>

		<guid isPermaLink="false">http://yamablo.com/2008/11/14-005442.php</guid>
		<description><![CDATA[来週から大学の研究室でゼミが始まります。初回ゼミが私の担当で担当は「ハッシュ」ということで、さっそくハッシュを実現するC++のクラスファイルを作ってみました。
想定は、2項目からなるデータをハッシュとして保持する状況を考 [...]]]></description>
			<content:encoded><![CDATA[<p>来週から大学の研究室でゼミが始まります。初回ゼミが私の担当で担当は「<strong>ハッシュ</strong>」ということで、さっそくハッシュを実現するC++のクラスファイルを作ってみました。</p>
<p>想定は、2項目からなるデータをハッシュとして保持する状況を考えてます。2項目のうち1つはキーとなる項目で、残りの1項目は非キー項目です。</p>
<p>ソースコードはまだまだ微妙な気がするので、ゼミまでにいろいろ修正を加えていきたいと思います。</p>
<p style="font-size: 1.5em; color: red;"><a href="http://yamablo.com/2008/12/19-103002.php">http://yamablo.com/2008/12/19-103002.php</a>の記事にHashクラスの改訂版があります。</p>
<p><span id="more-299"></span></p>
<h3>Hash.h</h3>
<ol class="sourceCode">
<li>#ifndef _STDIO_H_INCLUDED</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;stdio.h&gt;</li>
<li>#endif</li>
<li>#ifndef _STDLIB_H_INCLUDED</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;stdlib.h&gt;</li>
<li>#endif</li>
<li>#ifndef _STRING_H_INCLUDED</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;string.h&gt;</li>
<li>#endif</li>
<li></li>
<li>#define&nbsp;&nbsp;&nbsp;&nbsp; DATA_SIZE   256 </li>
<li>#define&nbsp;&nbsp;&nbsp;&nbsp; TABLE_SIZE  500</li>
<li></li>
<li><span class="comments">// ハッシュ表に格納するデータの構造</span></li>
<li>typedef struct data {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;key[DATA_SIZE];&nbsp;&nbsp;&nbsp;&nbsp;   <span class="comments">// 格納するキーのデータ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;value[DATA_SIZE];&nbsp;&nbsp;&nbsp;&nbsp; <span class="comments">// 格納する非キーのデータ</span></li>
<li>} data;</li>
<li></li>
<li>class Hash {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;public:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;HashTable[TABLE_SIZE];&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// ハッシュ表</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp; collision;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// コリジョンが発生した回数</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;public:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// ハッシュ値を求める</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int HashValue( char *str ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp; idx;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// インデックスカウンタ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp; length;&nbsp;&nbsp;&nbsp;&nbsp; <span class="comments">// 文字列の長さを格納</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp; h = 0;&nbsp;&nbsp;&nbsp;&nbsp;  <span class="comments">// ハッシュ値を格納</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length = strlen( str );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( idx=0; idx<length; idx++ ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h = h * 37 + str[idx];</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h = h % TABLE_SIZE;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return abs(h);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// コンストラクタ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hash() {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;collision = 0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// デストラクタ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~Hash() {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Do Nothing</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">/* ******************************************</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="comments">* ハッシュ表にデータを追加する</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="comments">* ****************************************** */</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void Add( data str ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp; h;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <span class="comments">// ハッシュ値を格納</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// ハッシュ値を計算しhに保存</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h = this-&gt;HashValue( str.key );</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// ハッシュ表の該当場所をチェックし、</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// 衝突していれば衝突回避するようにhを設定</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( this-&gt;HashTable[h].key[0] != &#8216;\0&#8242; ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while( 1 ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;collision++;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h++;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( h == TABLE_SIZE ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h = 0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( this-&gt;HashTable[h].key[0] == &#8216;\0&#8242; ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// データをハッシュ表に追加</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy( this-&gt;HashTable[h].key, str.key );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy( this-&gt;HashTable[h].value, str.value );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">/* ******************************************</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="comments">* ハッシュからデータを取り出す</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="comments">* ****************************************** */</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data Get( char *keys ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp; h;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <span class="comments">// ハッシュ値を格納</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;ret;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// 戻り値として返すデータ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// ハッシュ値を計算しhに保存</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h = this-&gt;HashValue( keys );</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// ハッシュ表の該当場所をチェックし、</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// その場所から目的のデータを探す</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( strcmp(this-&gt;HashTable[h].key, keys)!=0 ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while( 1 ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h++;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( h == TABLE_SIZE ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h = 0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if( h == this-&gt;HashValue( keys ) ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf( &#8220;404 Not Found.\n&#8221; );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( strcmp(this-&gt;HashTable[h].key, keys)==0 ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy( ret.key, HashTable[h].key );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy( ret.value, HashTable[h].value );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ret;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>};</li>
<li></li>
<li></li>
</ol>
<p><strong>関連記事</strong>
<ul class="similar-posts">
<li><a href="http://yamablo.com/2008/12/19-103002.php" title="[C++]Hashクラス・改訂版,">[C++]Hashクラス・改訂版,</a></li>
<li><a href="http://yamablo.com/2008/11/15-002600.php" title="ハッシュについて">ハッシュについて</a></li>
<li><a href="http://yamablo.com/2008/11/11-003903.php" title="[C++] Dimensionクラス">[C++] Dimensionクラス</a></li>
<li><a href="http://yamablo.com/2008/11/11-183734.php" title="[PHP] MySQLクラス">[PHP] MySQLクラス</a></li>
<li><a href="http://yamablo.com/2008/11/08-202822.php" title="[PHP] Queueクラス">[PHP] Queueクラス</a></li>
</ul>
<p><!-- Similar Posts took 14.771 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://yamablo.com/2008/11/14-005442.php/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yamablo.com/2008/11/14-005442.php" />
	</item>
		<item>
		<title>[PHP] MySQLクラス</title>
		<link>http://yamablo.com/2008/11/11-183734.php</link>
		<comments>http://yamablo.com/2008/11/11-183734.php#comments</comments>
		<pubDate>Tue, 11 Nov 2008 09:37:34 +0000</pubDate>
		<dc:creator>yama3</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://yamablo.com/2008/11/11-183734.php</guid>
		<description><![CDATA[PHPからMySQLへの接続周りのクラスファイルです。
自分は、普段PHPからMySQLへアクセスするときは、毎回Fetch Assocしたり・・・などという面倒なことをやりたくないのでいつもこのクラスファイルを使ってい [...]]]></description>
			<content:encoded><![CDATA[<p>PHPからMySQLへの接続周りのクラスファイルです。</p>
<p>自分は、普段PHPからMySQLへアクセスするときは、毎回Fetch Assocしたり・・・などという面倒なことをやりたくないのでいつもこのクラスファイルを使っています。</p>
<h3>このクラスファイルのメリット</h3>
<ul>
<li>MySQLへの接続が容易になる（と思う）。</li>
<li>クエリ実行時のSQLサニタイジングを自動で実行（MAGIC QUOTES GPCをチェックし、不要ならば実行しない）</li>
<li>クエリ結果は既にFetch Assocに通されており、配列として受け取れる。</li>
</ul>
<p>あとは、トランザクション処理なんかもできるようにしたらもっと便利になるのかも。</p>
<p><span id="more-320"></span></p>
<h3>Mysql.php</h3>
<ol>
<li>&lt;?php</li>
<li><span class="comments">/* ********************************************</span></li>
<li><span class="comments"> *  MySQL への接続関連のクラスファイル</span></li>
<li><span class="comments"> * ******************************************** */</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;class MysqlDB {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;&nbsp; $DBuser;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;&nbsp; $DBpass;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;&nbsp; $DBname;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;&nbsp; $DBhost;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;&nbsp; $DB;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;&nbsp; $charset;</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// デフォルトコンストラクタ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function MysqlDB( $charset = &#8220;utf-8&#8243; ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;charset = $charset;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// データベース情報をセットする。</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function Set( $user, $pass, $name, $host=&#8221;localhost&#8221; ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;DBuser = $user;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;DBpass = $pass;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;DBhost = $host;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;DBname = $name;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// MySQL データベースに接続する</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function Connect() {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;DB = mysql_connect( $this-&gt;DBhost, </li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;DBuser, $this-&gt;DBpass );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( $this-&gt;DB == false ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &#8220;Connect Error\n&#8221;;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql_query( &#8220;set ames ujis&#8221; );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql_select_db( $this-&gt;DBname );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &#8220;Connect OK\n&#8221;;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// MySQL データベースから切断する</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function Disconnect() {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql_close( $this-&gt;DB );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// MySQL クエリを実行する</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function Query( $q ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( $this-&gt;DB == false ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &#8220;Connect Error\n&#8221;;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// MAGIC QUOTES GPCがオフであれば、ここでSQLクエリをサニタイズ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( !get_magic_quotes_gpc() ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$q = addslashes( $q );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$res = mysql_query( $q );</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// クエリ結果をfetch assocしてリターン</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$k=0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while( $data[] = mysql_fetch_assoc( $res ) ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach( $data[$k] as $key =&gt; $value ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$d[$k][$key] = mb_convert_encoding( $value, $this-&gt;charset, &#8220;auto&#8221; );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$k++;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $d;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">/*</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">$db = new MysqlDB();</span></li>
<li><span class="comments">//&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;Set( &#8220;DBuser&#8221;, &#8220;DBpass&#8221;, &#8220;DBname&#8221;, &#8220;DBhost&#8221; );   // DBホストを省略しない表記</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">$db-&gt;Set( &#8220;DBuser&#8221;, &#8220;DBpass&#8221;, &#8220;DBname&#8221; );</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">$db-&gt;Connect();</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">$db-&gt;Disconnect();</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">*/</span></li>
<li></li>
<li></li>
<li>?&gt;</li>
<li></li>
</ol>
<p><strong>関連記事</strong>
<ul class="similar-posts">
<li><a href="http://yamablo.com/2008/11/08-202822.php" title="[PHP] Queueクラス">[PHP] Queueクラス</a></li>
<li><a href="http://yamablo.com/2009/05/21-131806.php" title="XAMPP for LinuxをVineLinuxにインストールさせた">XAMPP for LinuxをVineLinuxにインストールさせた</a></li>
<li><a href="http://yamablo.com/2008/11/11-003903.php" title="[C++] Dimensionクラス">[C++] Dimensionクラス</a></li>
<li><a href="http://yamablo.com/2008/11/14-005442.php" title="[C++] Hashクラス">[C++] Hashクラス</a></li>
<li><a href="http://yamablo.com/2009/06/02-215911.php" title="Smartyを使ったサイト制作">Smartyを使ったサイト制作</a></li>
</ul>
<p><!-- Similar Posts took 12.051 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://yamablo.com/2008/11/11-183734.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yamablo.com/2008/11/11-183734.php" />
	</item>
		<item>
		<title>[C++] Dimensionクラス</title>
		<link>http://yamablo.com/2008/11/11-003903.php</link>
		<comments>http://yamablo.com/2008/11/11-003903.php#comments</comments>
		<pubDate>Mon, 10 Nov 2008 15:39:03 +0000</pubDate>
		<dc:creator>yama3</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Class]]></category>

		<guid isPermaLink="false">http://yamablo.com/2008/11/11-003903.php</guid>
		<description><![CDATA[C++による２次元座標（平面座標）を表現するクラスです。
追加的な関数としては、点と点の距離を求める関数くらいかな？
あんまり関数が思いつかなかったです。
それにしても、C++でのクラスファイルの作成って文法的なところが [...]]]></description>
			<content:encoded><![CDATA[<p>C++による２次元座標（平面座標）を表現するクラスです。</p>
<p>追加的な関数としては、点と点の距離を求める関数くらいかな？</p>
<p>あんまり関数が思いつかなかったです。<br />
それにしても、C++でのクラスファイルの作成って文法的なところが思ったよりも難しい。やっぱりPHPが簡単に思えてしまう。</p>
<p>また、いつものように変更したほうがいい点などは教えてください。</p>
<p><span id="more-325"></span></p>
<h3>dimension.h</h3>
<ol class="SourseCode">
<li>#ifndef _MATH_H_INCLUDED</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;math.h&gt;</li>
<li>#endif</li>
<li></li>
<li>class dimension {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;public:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;&nbsp;&nbsp;&nbsp;x;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;&nbsp;&nbsp;&nbsp;y;</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;public:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// コンストラクタ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dimension() {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;x = 0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;y = 0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// Setter</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void Set( double px, double py ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;x = px;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;y = py;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void SetX( double px ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;x = px;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void SetY( double py ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;y = py;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// Getter</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void Get( double &#038;x, double &#038;y ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = this-&gt;x;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y = this-&gt;y;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double GetX() {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this-&gt;x;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double GetY() {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this-&gt;y;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// 点と点の距離を求める。（指定された点との距離）</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double distance( dimension target_point ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double a = this-&gt;x &#8211; target_point.x;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double b = this-&gt;y &#8211; target_point.y;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double c = sqrt( a*a + b*b );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return c;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// 点と点の距離を求める。（原点との距離）</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double distance() {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double a = sqrt( this-&gt;x * this-&gt;x + this-&gt;y * this-&gt;y );</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return a;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// デストラクタ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~dimension() {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>};</li>
<li></li>
<li><span class="comments">/*</span></li>
<li><span class="comments">#include &lt;stdio.h&gt;</span></li>
<li></li>
<li><span class="comments">int main() {</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">dimension   p1;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">dimension   p2;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">double&nbsp;&nbsp;&nbsp;&nbsp;  a, b;</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">p1.Set( 4, 5 );</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">p1.Get( a, b );</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">p2.Set( a, b );</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">printf( &#8220;Distance From Origine: %f\n&#8221;, p1.distance(p2) );</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">return 0;</span></li>
<li><span class="comments">}</span></li>
<li><span class="comments">*/</span></li>
</ol>
<p><strong>関連記事</strong>
<ul class="similar-posts">
<li><a href="http://yamablo.com/2008/12/19-103002.php" title="[C++]Hashクラス・改訂版,">[C++]Hashクラス・改訂版,</a></li>
<li><a href="http://yamablo.com/2008/11/14-005442.php" title="[C++] Hashクラス">[C++] Hashクラス</a></li>
<li><a href="http://yamablo.com/2008/11/08-202822.php" title="[PHP] Queueクラス">[PHP] Queueクラス</a></li>
<li><a href="http://yamablo.com/2008/11/11-183734.php" title="[PHP] MySQLクラス">[PHP] MySQLクラス</a></li>
<li><a href="http://yamablo.com/2009/07/22-114412.php" title="皆既日食を科学する">皆既日食を科学する</a></li>
</ul>
<p><!-- Similar Posts took 13.920 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://yamablo.com/2008/11/11-003903.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yamablo.com/2008/11/11-003903.php" />
	</item>
		<item>
		<title>[PHP] Queueクラス</title>
		<link>http://yamablo.com/2008/11/08-202822.php</link>
		<comments>http://yamablo.com/2008/11/08-202822.php#comments</comments>
		<pubDate>Sat, 08 Nov 2008 11:28:22 +0000</pubDate>
		<dc:creator>yama3</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Queue]]></category>

		<guid isPermaLink="false">http://yamablo.com/2008/11/08-202822.php</guid>
		<description><![CDATA[PHPによるQueueのクラスファイルです。 単純な実装しかしてないような気がしますけど。。。もっとこうするといいよ、などという意見がございましたら、どんどんお願いします。 Queue.php &#60;?php &#160;&#160;&#160;&#160;class Queue{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var $num = 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // キューの有効要素数 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var $arg=array();&#160;&#160;&#160;&#160; // キューの配列 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//コンストラクタ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function Queue(){ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&#62;num=0; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function pop(){ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if( $this-&#62;num != 0 ) { &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&#62;num = $this-&#62;num &#8211; 1; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$tmp = $this-&#62;arg[$this-&#62;num]; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return $tmp; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function push( $x ) { &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&#62;arg[$this-&#62;num] = $x; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&#62;num++; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//デストラクタ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function destroy(){ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;unset($this); [...]]]></description>
			<content:encoded><![CDATA[<p>PHPによるQueueのクラスファイルです。
<p>単純な実装しかしてないような気がしますけど。。。もっとこうするといいよ、などという意見がございましたら、どんどんお願いします。</p>
<p><span id="more-322"></span></p>
<h3><strog>Queue.php</strong></h3>
<ol>
<li>&lt;?php</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;class Queue{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $num = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   <span class="comments">// キューの有効要素数</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $arg=array();&nbsp;&nbsp;&nbsp;&nbsp;   <span class="comments">// キューの配列</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//コンストラクタ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function Queue(){</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;num=0;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function pop(){</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( $this-&gt;num != 0 ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;num = $this-&gt;num &#8211; 1;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmp = $this-&gt;arg[$this-&gt;num];</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $tmp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function push( $x ) {</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;arg[$this-&gt;num] = $x;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;num++;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">//デストラクタ</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function destroy(){</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unset($this);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// | キュークラスのサンプルデータ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  |</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">// +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">/*</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">$c=new Queue();</span></li>
<li></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">$c-&gt;push(4);</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">$c-&gt;push(3);</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">$c-&gt;push(5);</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">$c-&gt;push(7);</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">print $c-&gt;pop().&#8221;\n&#8221;;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">print $c-&gt;pop().&#8221;\n&#8221;;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">print $c-&gt;pop().&#8221;\n&#8221;;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">print $c-&gt;pop().&#8221;\n&#8221;;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">$c-&gt;push(3);</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">print $c-&gt;pop().&#8221;\n&#8221;;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">print $c-&gt;pop().&#8221;\n&#8221;;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">*/</span></li>
<li></li>
<li>?&gt;</li>
</ol>
<p><strong>関連記事</strong>
<ul class="similar-posts">
<li><a href="http://yamablo.com/2008/11/11-183734.php" title="[PHP] MySQLクラス">[PHP] MySQLクラス</a></li>
<li><a href="http://yamablo.com/2008/11/11-003903.php" title="[C++] Dimensionクラス">[C++] Dimensionクラス</a></li>
<li><a href="http://yamablo.com/2008/12/19-103002.php" title="[C++]Hashクラス・改訂版,">[C++]Hashクラス・改訂版,</a></li>
<li><a href="http://yamablo.com/2008/11/14-005442.php" title="[C++] Hashクラス">[C++] Hashクラス</a></li>
<li><a href="http://yamablo.com/2009/06/02-215911.php" title="Smartyを使ったサイト制作">Smartyを使ったサイト制作</a></li>
</ul>
<p><!-- Similar Posts took 19.715 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://yamablo.com/2008/11/08-202822.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yamablo.com/2008/11/08-202822.php" />
	</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.853 seconds -->
