• ベストアンサー

初心者なんですが、モジュールが良くわからなくて,,,

c言語で文字列のハッシュモジュールを作ることになったんですが、そもそもモジュールの知識がほぼないのでどう書けばいいか、よくわかりません。 例えば、文字列の配列が渡されてハッシュを作るのですが、そもそもそこらへんの渡し方をどのように書けばいいのかもわかりません。誰かわかりやすく教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Interest
  • ベストアンサー率31% (207/659)
回答No.3

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)

回答No.6

ですね。標準C++には各コンテナの実装については何も規定してはいませんが、 仕様および時間計算量に対する要請からして少なくともハッシュではありません。 C++0X/IR1で新たに標準となった unordered_set/multiset/map/multimap が ハッシュによるコンテナです。

回答No.7

ですね。標準C++には各コンテナの実装については何も規定してはいませんが、 仕様および時間計算量に対する要請からして少なくともハッシュではありません。 C++0X/IR1で新たに標準となった unordered_set/multiset/map/multimap が ハッシュによるコンテナです。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

厳密にいえば binary tree とは限らないけど事実上 binary tree, でしたっけ>#4.

回答No.4

No.3> このmapは、ずばりハッシュテーブルです。 違います。binary-treeです。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「そこらへんの渡し方」はモジュールのインターフェースの一部だから, 「上の人が決めたものがある」か「あなたが使う人と一緒になって決めた」かのどちらかのはず. そもそも「ハッシュモジュールで何をするのか」は理解されてますか?

yxia001
質問者

補足

一応、わかっているつもりです。ファイル内の文字列をハッシュモジュールでハッシュテーブルに格納するという、モジュールを作って、mainのほうで検索をかけて、マッチしたらそこの文字列の情報を引っ張ってくるということをやろうと考えています。というかmain関数も自分が書くのですが。 今回はモジュールを作ってみようということでやり始めたんですが、肝心のモジュールについてほ素人同然だったので、今勉強しているのですが、なかなか理解が追いつかず詰まっている状態です。

  • Interest
  • ベストアンサー率31% (207/659)
回答No.1

モジュールをどういう単位で考えているかわかりませんが、例えば関数を作れということでしたら、こんな感じでどうでしょうか。 /**  名称: 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 );

yxia001
質問者

補足

アドバイス有難う御座います。なるほど、このように書くのですか。 僕がすることは、main関数で読み込んだファイル(およそ10万件)の文字列をハッシュにするために使うモジュールを作らなければならないんです。 これを参考にして、まずがんばってみます。

関連するQ&A