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]);

но по какой-то причине он не вызывает мою хэш-функцию, которая определена выше, как это

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

По какой-то причине он не будет вызывать мою функцию hash_value. Любая помощь по этому вопросу будет высоко ценится!

2 ответа

Вы можете поставить хеш-функцию в хеш-таблицу, используя boost::intrusive::hash в списке вариантов.

Вы используете функцию-член, а для 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_); }
};
Другие вопросы по тегам