$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] Boost.multi_index: how to use a member function	instead ofoperator<()?
From: Joaquin M Lopez Munoz (joaquin_at_[hidden])
Date: 2009-02-23 15:22:12
Joost Kraaijeveld <J.Kraaijeveld <at> Askesis.nl> writes:
> 
> Hi,
> 
> I want to use in index based on a member function that returns a bool if
> an element is smaller than an other element like operator<. But I cannot
> find how to do that.
> 
> e.g.
> 
> using namespace ::boost;
> using namespace ::boost::multi_index;
> 
> class Object{
>   bool operator<(const Object& rhs) const;
>   bool fn(const Object& rhs) const;
> }
> 
[...]
Do as follows:
  struct ObjectLessbyFn
  {
    bool operator()(const Object& lhs, const Object& rhs) const{
      return lhs.fn(rhs);
    }
  };
  typedef multi_index_container<
    Object,
    indexed_by<
      ordered_unique< identity< Object > >,
      ordered_unique< tag< FnIndex >, identity< Object >, ObjectLessbyFn >
    >
  > ObjectContainer;
In the first index std::less<Object> is used as the default
compare predicate, which, as you correctly guess, resorts to
Object::operator<.
Best regards,
JoaquÃn M López Muñoz
Telefónica, Investigación y Desarrollo