1

谁能提供一个简单的例子来说明如何使用 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]);

但由于某种原因,它没有像这样调用上面定义的我的哈希函数

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

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

4

2 回答 2

1

您可以使用选项列表向哈希表提供哈希函数boost::intrusive::hash

于 2012-07-26T13:03:34.097 回答
1

您正在使用成员函数,而 boost::hash 需要一个自由函数。请参阅 boost::hash 文档:

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

您还可以使用类中声明的“朋友”函数,如Boost.Intrusive unordered_set 文档中所示:

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_); }
};
于 2016-09-07T21:37:58.323 回答