Boost logo

Boost Users :

From: Igor R (boost.lists_at_[hidden])
Date: 2008-07-13 08:12:45


Hello,

Given a multi_index_container with 1 hashed unique identity key (kind
of unordered set) - is there a "trivial" way to find a value by its
hash-code?
Currently, I'm using a trick with supplying custom hashing/equality
functors, but probably there's some more straightforward way?

struct Element
{//...};

size_t hash_value(const Element &e)
{ //... }

typedef mi::multi_index_container<Element,
mi::indexed_by<mi::hashed_unique<mi::identity<Element> > > ElementSet;

struct ElementEq
{
  bool operator()(size_t x, const Element &y) const
  {
    return x == boost::hash<Element>()(y);
  }
};

struct ElementHashHasher
{
  std::size_t operator()(size_t x) const
  {
    return x;
  }
};

int main()
{
  ElementSet elementSet;
  //....
  // I've got here a hash-value of an element, and I wish to find it in the set.
  ElementSet::iterator pos = elementSet.find(hashValue,
ElementHashHasher(), ElementEq());
}

Another way I tried was defining the hash-code as an explicit key:

//...
  mi::hashed_unique<
    mi::global_fun<const Element&, std::size_t, &hash_value>
>
//...
The problem however is that my hash_value functions are templates, and
the above definition is not compiling...

Thanks!


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net