提升侵入式哈希表

Boost Intrusive Hashtable

本文关键字:哈希表      更新时间:2023-10-16

任何人都可以提供一个简单的例子来说明如何使用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函数。任何这方面的帮助将不胜感激!

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

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

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

您还可以使用在类中声明的"friend"函数,如 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_); }
};