2011-09-17 11 views
4

boost::unordered_map<key,value>をご利用ください。keystd::set<int>です。整数の集合は組込み型ではないので、私は自分自身のハッシュ関数を提供しなければならないと考えました(むしろ、boost's hash_rangeを使うことを考えていました)。boost :: unordered_map - ハッシュstd :: set <int>のカスタムハッシュ関数を指定する必要がありますか?

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

ありがとうございます。 the Boost documentationによれば

+0

実際にプログラム全体を実行可能ファイルにリンクしましたか? –

+0

はい、うまく動作します。もともと、私はstd :: mapを使っていました(後でハッシングビジネスをするつもりだと思っています)。そしてunorderered_mapに置き換えました。 – Egon

+0

ああ、申し訳ありませんが、あなたは、標準バージョンではなく、ブーストバージョンについて話しています。気にしないで。もしあなたが好きなら、あなたはまだstdバージョンを使用してboost boostを使うことができます:-) –

答えて

3

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

そして、the documentation for Boost.Hashによれば、デフォルトのハッシュ関数は、標準コンテナのために提供されています。したがって、既にstd::setのために書かれたハッシュ関数が存在する。 Boostハッシュコンテナは、自動的にハッシュセットをどのようにするかを知るほどスマートではありませんが、すでに提供されている実装を使用するのに十分なほどスマートです。

希望すると便利です。

3

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

によると、それはで動作します:

integers 
floats 
pointers 
strings 

また、(ライブラリ拡張テクニカルレポート課題リストの問題6.18でピーターDimov氏によって提案された拡張機能を実装ページ63)、これはのためのサポートが追加されています

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

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

はい、boostはSTLコンテナをハッシュするのに十分なほど巧妙です。 setという特定のユースケースに固有のものが分かっていない限り、私はあなた自身のハッシュ関数を提供することには何の問題もないと思う。

関連する問題