2012-04-16 50 views
1

任何人都可以提供一個簡單的例子來說明如何使用Boost Intrusive Hashtable?我試圖實現它,但我運氣不錯。Boost Intrusive Hashtable

我有以上這樣

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

定義出於某種原因,它不會叫我的哈希值函數這個到目前爲止

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函數。任何幫助,將不勝感激!

+0

我沒有看到你在哈希表的實例隨時隨地提供您的哈希函數。 .. – RedX 2012-04-16 08:14:22

+0

我會怎麼做呢? – mikez 2012-04-16 15:44:59

回答

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_); } 
};