私は高水準言語のプログラミング経験があり、数週間前に(学術的理由で)プレーンCでコーディングを開始しました。私はmap<char,myStruct*>
のようなデータ構造を実装したいと思います。プレーンCの単一文字からポインターへのマッピングの実装
これで十分ではない場合:可能なすべてのSINGLE char
のどこかで定義した構造体へのポインタへの「マッピング」が必要です。 2 char
が同じstruct
を指し示すことができないようにする方法があれば(地図上に新しい要素を挿入するときはchar
をチェックせずに)、それはきちんとしていますが、それは厳密には必要ではありません。また、マップからペアリングを削除し、同じキーであるが異なるポインターでペアリングを再挿入できるようにする必要があります。
私はこれを考えて、すべての可能な文字の長さをポインタ配列として作成し、配列インデックスとしてcharを使用して対応するポインタを格納することができたと考えました。これはうまくいくかもしれませんが、私のアプリケーションで2つの文字だけを使用すると、そのアドレスに多くのスペースを割り当てるのは非効率的です。
まだ、私は他の解決策は考えられませんでした(私はC初心者だと考えていますが、驚くことではありません)。私は、たとえあいまいであっても、正しい方向への提案には感謝します。
私はあなたがGlibライブラリを調べることをお勧めします - それはハッシュとあらゆる種類のものを含みます。あなたはそれらからいくつかのアイデアを "盗む"ことができます。 「テンプレート」が醜い場合は、厳密な型だけのマップを実装したい場合はそれほど難しくありません。純粋なCの "テンプレート"または "ジェネリックス"の背後にある一般的な考え方は、コンテナにstructの "sizeof"を伝えてそれを使用することです。 #defineマクロを使用して、アクセスする際に特定のタイプにマテリアルをキャストします。実際の構造体メモリは、char配列として格納されます。 – Matej
基本的な考え方は、構造体を操作する関数を使用することです。構造体は、キーのサイズ、格納されたデータのサイズ、ハッシュ関数へのポインタ(設定可能にしたい場合)など、マップが表すマップについての特定のことを知る必要があります。これに関連したStandford semiからのいくつかのyoutubeビデオを見て、私がそれらを見つけることができるかどうかを見て覚えています。 – Corbin
あなたが望むものはハッシュテーブルと呼ばれます。そして私の推測では、あなたのキーは文字列なので、charではなくchar *(普通のvoid * array [256];で実装できる)であろうということです。 – wildplasser