2012-02-04 6 views
1

unordered_mapを考えてみましょう:unordered_mapをツリーデータ構造で効率的に実装する方法は?

template< 
    class Key, 
    class T, 
    class Hash = std::hash<Key>, 
    class KeyEqual = std::equal_to<Key>, 
    class Allocator = std::allocator< std::pair<const Key, T> > 
> class unordered_map; 

私は(a==b)!(a<b) && !(b>a)よりも高速ですけど、unordered_mapは、マップ内のキーを格納/比較することstd::less<Key>を使用していないので、私はどのようにあるツリーデータ構造により、実装の利益を得ることができるだろう同じバケット内の異なるキーを読み書きする最も効率的な方法です。 KeyからKeyWrapperへの変換を定義したoperator<()は、ツリーを使った実装では避けられないようです。

+0

私はあなたがここで何を求めているか完全にはわかりません。あなたはバケット内で木を使うことについて話していますか?または、ハッシュテーブルの代わりにツリーを使用しますか?しかし、あなたの一般的な質問:効率的なツリーの場合は、適切にツリーのバランスを取るために比較演算子が必要です。 – Joe

+0

はい、私はバケット内の木について話しています(つまり、スプレーツリー) – Martin

答えて

1

unordered_map内のツリーをバケット内で使用することはできません。 unordered_mapのインターフェイスは単にそれを許可しません。鍵のタイプは、同等以上のものでなければならない。それが「順序付けられていない」マップと呼ばれる理由です。要素の特定の順序付けがないためです。ある種のバイナリツリーを使用するには厳密な弱い順序が必要ですが、これは必須ではありません。

unordered_mapのバリエーションを使用することができます。しかし、それは標準によって定義されたunordered_mapではありません。

+0

同じバケツで崩壊する要素を格納/読み込むための木について話していました。 – Martin

+0

@Martin:十分に公正です。私の編集を参照してください。 –

関連する問題