2012-04-16 10 views
1

誰もBoost Intrusive Hashtableの使い方の簡単な例を提供できますか?私はそれを実装しようとしましたが、私は運が少ししかありません。Boost Intrusive Hashtable

私がこれまで

void HashTableIndex::addToIndex(Message* message) 
{ 
hashtable<MyMessageVector>::bucket_type base_buckets[10000]; 
hashtable<MyMessageVector> htable(hashtable<MyMessageVector>::bucket_traits(base_buckets, 10000)); 
boost::array<MyMessageVector,10000> items; 
htable.insert_unique(items[0]); 

が、それはそれは私のHASH_VALUE関数を呼び出しませんいくつかの理由について

このような
size_t HashTableIndex::hash_value(MyMessageVector& b) 
{ 
    boost::hash<string> hasher; 
    return hasher(b.getKey()); 
}; 

上で定義されている私のハッシュ関数を呼び出していないいくつかの理由のためにこれを持っています。これについての助けがあれば幸いです!

+0

に示すように、また、私はあなたがどこでもハッシュテーブルのインスタンス化であなたのハッシュ関数を供給表示されていないクラスで宣言「友人」機能を使用することができます。 .. – RedX

+0

どうすればいいですか? – mikez

答えて

0

ハッシュテーブルには、オプションリストのboost::intrusive::hashを使用してハッシュ関数を指定できます。

0

メンバー関数を使用していて、boost :: hashには自由な関数が必要です。 See boost::hash documentation:

namespace library 
{ 
    std::size_t hash_value(book const& b) 
    { 
     boost::hash<int> hasher; 
     return hasher(b.id); 
    } 
} 

Boost.Intrusive unordered_set documentation:

class MyClass 
{ 
    //... 
    public: 
    friend bool operator== (const MyClass &a, const MyClass &b) 
    { return a.int_ == b.int_; } 

    friend std::size_t hash_value(const MyClass &value) 
    { return std::size_t(value.int_); } 
}; 
関連する問題