- ベストアンサー
初心者なんですが、モジュールが良くわからなくて,,,
c言語で文字列のハッシュモジュールを作ることになったんですが、そもそもモジュールの知識がほぼないのでどう書けばいいか、よくわかりません。 例えば、文字列の配列が渡されてハッシュを作るのですが、そもそもそこらへんの渡し方をどのように書けばいいのかもわかりません。誰かわかりやすく教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1 = Interestです。 > ファイル内の文字列をハッシュモジュールでハッシュテーブルに格納するという > モジュールを作って、mainのほうで検索をかけて、マッチしたらそこの文字列の > 情報を引っ張ってくるということをやろうと考えています。 ハッシュのお勉強目的ではないのなら、C++の標準ライブラリにあるmapクラスを使うと楽ですね。 ご要望の処理を実現してくれます。このmapは、ずばりハッシュテーブルです。文字列は char配列ではなく、stringを使います。 例えば、こんな感じで使います。 map<strig, int> mymap; mymap.insert( map<string, int>::value_type("hoge", 1) ); // ハッシュテーブルに登録する cout << mymap["hoge"] << "\n"; // ハッシュテーブルから "hoge" に相当する値を参照する < > でくくられた部分はC++の「テンプレート」という機能を使っており、プログラム開発者が自分の使いたい型を指定できるようになっています。 自分でハッシュ関数を作るところからやっているとバグまで一緒に作ってしまうので(汗)、標準ライブラリを使ったほうが信頼性の高いものになると思います。 キーワード: STL, 標準テンプレートライブラリ, map, 連想配列
その他の回答 (6)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
ですね。標準C++には各コンテナの実装については何も規定してはいませんが、 仕様および時間計算量に対する要請からして少なくともハッシュではありません。 C++0X/IR1で新たに標準となった unordered_set/multiset/map/multimap が ハッシュによるコンテナです。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
ですね。標準C++には各コンテナの実装については何も規定してはいませんが、 仕様および時間計算量に対する要請からして少なくともハッシュではありません。 C++0X/IR1で新たに標準となった unordered_set/multiset/map/multimap が ハッシュによるコンテナです。
- Tacosan
- ベストアンサー率23% (3656/15482)
厳密にいえば binary tree とは限らないけど事実上 binary tree, でしたっけ>#4.
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
No.3> このmapは、ずばりハッシュテーブルです。 違います。binary-treeです。
- Tacosan
- ベストアンサー率23% (3656/15482)
「そこらへんの渡し方」はモジュールのインターフェースの一部だから, 「上の人が決めたものがある」か「あなたが使う人と一緒になって決めた」かのどちらかのはず. そもそも「ハッシュモジュールで何をするのか」は理解されてますか?
- Interest
- ベストアンサー率31% (207/659)
モジュールをどういう単位で考えているかわかりませんが、例えば関数を作れということでしたら、こんな感じでどうでしょうか。 /** 名称: get_hash_code 概要: 文字列からハッシュコードを作成する。 引数: *key ハッシュキーとなる文字列へのポインタ 戻り値: 0 <= ハッシュコード 0 > エラーコード */ int get_hash_code(char *key) { if( NULL == key ) return -1; /* 以下、ハッシュキーからハッシュコードを作る処理を書いてください。*/ } > 例えば、文字列の配列が渡されてハッシュを作るのですが、 > そもそもそこらへんの渡し方をどのように書けばいいのかもわかりません。 上記の例を使えば、下記のように文字列を関数に渡すことができます。 char *key = "hogehoge"; int code = get_hash_code( key );
補足
アドバイス有難う御座います。なるほど、このように書くのですか。 僕がすることは、main関数で読み込んだファイル(およそ10万件)の文字列をハッシュにするために使うモジュールを作らなければならないんです。 これを参考にして、まずがんばってみます。
補足
一応、わかっているつもりです。ファイル内の文字列をハッシュモジュールでハッシュテーブルに格納するという、モジュールを作って、mainのほうで検索をかけて、マッチしたらそこの文字列の情報を引っ張ってくるということをやろうと考えています。というかmain関数も自分が書くのですが。 今回はモジュールを作ってみようということでやり始めたんですが、肝心のモジュールについてほ素人同然だったので、今勉強しているのですが、なかなか理解が追いつかず詰まっている状態です。