4

を使用したいのですがboost::unordered_map<key,value>keystd::set<int>です。整数のセットは組み込み型ではないため、独自のハッシュ関数を提供する必要があると想定しました(つまり、boostのhash_rangeを使用することを考えていました)。

しかし、今私はこのようなハッシュマップを初期化しようとしましたが、ハッシュ関数も等式述語も提供していませんでした-そしてgccは文句を言いませんでした。ここで何が起きてるの?Boostは、STLコンテナをすべて単独でハッシュするのに十分賢いですか?これは、カスタムハッシュ関数を使用した場合よりも遅くなりますか?使用するのはboost::hash_rangeどうですか?

前もって感謝します。

4

2 に答える 2

3

Boostのドキュメントによると:

デフォルトのハッシュ関数はBoost.Hashです。

また、Boost.Hashのドキュメントによると、標準のコンテナにはデフォルトのハッシュ関数が用意されています。したがって、のために書かれたハッシュ関数がすでにありstd::setます。Boostハッシュコンテナは、セットを自動的にハッシュする方法を知るのに十分賢いわけではありませんが、すでに提供されている実装を使用するのに十分賢いです。

お役に立てれば!

于 2011-09-17T21:42:52.363 に答える
3

デフォルトのboost::hash< Key >機能が選択されています。そのドキュメントによると

TR1に準拠しているため、以下で動作します。

integers
floats
pointers
strings

また、ライブラリ拡張テクニカルレポートの問題リスト(63ページ)の問題6.18でPeter Dimovによって提案された拡張を実装します。これにより、次のサポートが追加されます。

arrays
std::pair
the standard containers.
extending boost::hash for custom types.

http://www.boost.org/doc/html/hash.html

そうです、ブーストはSTLコンテナをハッシュするのに十分賢いです。の特定のユースケースに固有の何かを知らない限りset、独自のハッシュ関数を提供することに意味があるとは思えません。

于 2011-09-17T21:43:18.410 に答える