提升侵入式哈希表

时间:2012-04-16 05:24:09

标签: c++ boost hashtable boost-intrusive

任何人都可以提供一个如何使用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函数,就像这个

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

由于某种原因,它不会调用我的hash_value函数。对此的任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您可以使用选项列表中的boost::intrusive::hash将哈希函数提供给哈希表。

答案 1 :(得分:1)

您正在使用成员函数,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_); }
};