たとえば、数百冊の本を含むテキストファイルがあるとします。それらの本の下に著者があり、一部の著者は複数の本を持つことができます。
情報の一部を検索または検索するときに、ファイル全体 (配列、ベクトルなど) をメモリに読み込まないように、このプログラムをどのように作成すればよいでしょうか。著者名を入力すると、著者が書いたすべての本が検索されるとします。だから私はこれを行うための最良の方法と最も効率的な方法に興味があります.
これをC++でコーディングします
たとえば、数百冊の本を含むテキストファイルがあるとします。それらの本の下に著者があり、一部の著者は複数の本を持つことができます。
情報の一部を検索または検索するときに、ファイル全体 (配列、ベクトルなど) をメモリに読み込まないように、このプログラムをどのように作成すればよいでしょうか。著者名を入力すると、著者が書いたすべての本が検索されるとします。だから私はこれを行うための最良の方法と最も効率的な方法に興味があります.
これをC++でコーディングします
基本的な答えは FileStream です。したがって、ディスク上のファイル内の場所を探して、そこから読み取ります。ただし、その時点でディスク io バウンドが非常に多くなり、何かを見つけるたびに最初からターゲットまで読み取る必要がない限り、ファイルは何らかの構造に準拠する必要があります。つまり、著者順である必要があり、それが受け入れられたとしても、それ以外のものを検索するのは非常に非効率的です。
問題に対する古典的なアプローチは、インデックスファイルです。したがって、books.dat は関連する authors.idx になります。これは、できれば著者別にソートされた著者とタイトルのリストです。次に、タイトルである titles.idx と、books.dat での本の開始位置があります。ファイルの次のタイトルは、本の長さを示します。
もちろん、両方のファイルを維持する必要があります。アプリケーションがファイルを編集しない場合は、uo を使用して必要なインデックスを作成することをお勧めします。