任何人都可以提供一个如何使用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函数。对此的任何帮助将不胜感激!
答案 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_); }
};