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::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 に答える
1

boost::intrusive::hashオプションのリストを使用して、ハッシュ関数をハッシュ テーブルに指定できます。

于 2012-07-26T13:03:34.097 に答える