2

著者と著者が書いた本を含むテキストファイルがあります。私は、ユーザーが作成者の名前を提供するプログラムを作成するように割り当てられています。そしてプログラムは、その著者が書いた本の名前を出力しなければなりません。

この情報を読み取るために ifstream を使用することになっていることを理解しています。しかし、検索クエリを実行するためにプログラムがファイル全体 (配列、ベクトルなど) をメモリに読み込まないようにするにはどうすればよいでしょうか?

これにアプローチする最良の方法は何ですか?私のプログラムでもクラスを使用する必要があります。

4

2 に答える 2

4

答え全体、あるいは構文さえもわかりませんが、始めるための良い方法は、入力テキストファイルの形式について何を知っているかです。共通の区切り文字で区切られた[AuthorBook]のような単純な2列のファイルですか?その場合、ファイル全体を通過するループを構築し、検索文字列に一致するベクトルにのみエントリを格納することができます。

于 2012-09-08T01:21:21.077 に答える
1

ここでの多くは、ファイルから本を探す頻度に依存します。1 つまたは 2 つのみを探す場合、おそらく最も賢明な方法は、ファイルをスキャンして行のペアを読み取り、目的の行を見つけることです。

他のほとんどの方法では、後でクエリを最適化するために前もって余分な時間を費やすことを正当化するのに十分な頻度で、ファイル内のデータを検索することを前提としています。それが正しいと仮定すると、1 つの可能性は、ファイルを読み込んで、各著者の名前と、その著者/本のペアの「レコード」のファイル内の位置をハッシュして、インデックスを作成することです。

次に、それらのハッシュ/ファイル オフセットのペアを別のファイルに保存します。クエリを実行する場合は、ハッシュ/ファイル オフセットをメモリに読み込みます。検索している作成者の名前を (同じアルゴリズムを使用して) ハッシュし、同じハッシュ値を持つファイル オフセット (存在する場合) を確認します。ファイルのそれらのスポットを探して、本の記録を読んでください。その時点で、ハッシュの競合が発生した場合に備えて、ファイル内の作成者名を入力された作成者名と再比較します。一致したレコードを表示します。

于 2012-09-08T04:45:58.137 に答える