0

C++ hash_map のハッシュ値にアクセスしたいと思います。私は試した:

__gnu_cxx::hash_map<string, int> my_table;
const hash<string> hh = my_table.hash_funct();
string s("hello");
size_t j = hh(s);

最後の行はコンパイルされません:

no match for call to '(const __gnu_cxx::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >) (std::string&)

明らかに、ハッシュ関数の使用方法がわかりません。誰かがヒントを持っていれば、それは大歓迎です。

4

2 に答える 2

4

古いSTLには、STLの一部ではなかったため、hashforの特殊化は含まれていませんでした。STLが提供する専門分野の完全なリストは、http: //www.sgi.com/tech/stl/hash.htmlに記載されています。std::stringstd::string

最良のオプションは、おそらく最新の同等の、、std::unordered_mapまたはstd::tr1::unordered_mapC++11を使用できない場合に使用することです。

hash_map何らかの理由で本当に使用する必要がある場合は、おそらく自分でそれを専門にすることができます:

namespace __gnu_cxx {
    template <> struct hash<std::string> {
        size_t operator()(std::string const & s) const {
            hash<const char *> h;
            return h(s.c_str());
        }
    };
}
于 2012-06-29T15:48:15.137 に答える
0

cplusplus.comでhash_mapリファレンスが見つかりませんが、次の行を読んでいます:hash_map<string, int>

ここにテンプレートパラメータがありません。const hash<string> hh

いいえ?

于 2012-06-29T15:48:09.047 に答える