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