2016-04-19 18 views
1

辞書のようなデータ構造が必要ですが、使用するキーは気にしません。私はちょうどハンドルとしてキーを使用してアイテムを認識したいので、構造体を選択させたいと思います。"ランダムキー辞書"構造の実際の名前は何ですか?

例:

RandomKeyDict dict; 
Key k = dict.insert(foobar); 
... 
// somewhere else in the code 
dict.get(k); 

どのようにこの構造が実際に呼び出されますか?

編集:構造からアイテムを削除する必要があるので、私はvectorが私のここにいるとは思わない。

+0

ハッシュとキーは2つの異なるものです。あなたは鍵を気にしますが、ハッシュについては気にしませんよね? – BlackBear

+0

いいえ、キーは0、1234、31415、42、何でもかまいません。オブジェクトを挿入するときに返されるキーを使用すると、同じオブジェクトが返されることを確認したいだけです。 – Lithy

+0

辞書が好きですか? – BlackBear

答えて

1

これは「準辞書」と呼ばれます。 "An Efficient Quasidictionary", by Torben Hagerup and Rajeev Ramanを参照してください。

+0

quasidictionaryは何ですか?そのリンクが消えた場合、この回答は孤立しています。また、PostScriptファイルは多くの人にとって読みにくいものです。 –

+0

ありがとう、これは私が探していたものです! PDFバージョンはこちら:http://cdn.preterhuman.net/texts/math/Data_Structure_And_Algorithms/Algorithm%20Theory%20-%20SWAT%202002%20-%20M.%20Penttonen.pdf – Lithy

+0

@JohnKugelman "準同義語は次のようになります。データ項目である を識別する名前がそのユーザによってではなくデータ構造によって選択されるという違いがあります。 (要約から) – Lithy

2

実装上は、フロントエンドで任意のキーを生成して辞書をバックエンドとして使用して、これを自分で作成することができます。あなたは鍵の一意性を保証したいと思うので、私は反復するかもしれないランダムな鍵ではなく、インクリメントするカウンタのようなものを提案します。

用語集として、ハンドルはです。これは、CやWin32プログラミングのようなオブジェクトを検索するための不透明ポインタに似ているためです。またはのチケットのように、コートチェックルームや車のバレットから好きです。

+0

はい、辞書+ランダムキーはそれを実装する解決策ですが、キーの選択にこのような自由の恩恵を受けるアルゴリズムがあるかどうか、木や何か。 – Lithy

+1

ハッシュテーブルには、O(1)の償却されたルックアップと挿入があります。キーの順序は重要ではないので、それはかなり最適です。 –

関連する問題