Boost multi-index container with index based on nested values
boost, c++, multi-index, nested
Solution
I believe you need to create a predicate object that takes two instances of Foo and its operator() can call Foo::bar() on both instances.
Something like
struct MyPredicate
{
bool operator() (const Foo& obj1, const Foo& obj2) const
{
// fill in here
}
};
and then use
...
boost::multi_index::ordered_unique<boost::multi_index::tag<tag_prop>,
boost::multi_index::identity<Foo>, MyPredicate>,
...
Check out MultiIndex Ordered indices reference
Problem
If I have an object like this: ``` struct Bar { std::string const& property(); }; ``` I can create a multi-index container for it like this: ``` struct tag_prop {}; typedef boost::multi_index_container< Bar, boost::multi_index::indexed_by< boost::multi_index::ordered_non_unique< boost::multi_index::tag<tag_prop>, boost::multi_index::const_mem_fun< Bar, const std::string&, &Bar::property > > > , ... other indexes > BarContainer; ``` But if I have a class like this: ``` struct Foo { Bar const& bar(); }; ``` How can I construct an index on `.bar().property()` for a container of `Foo` objects? Normally I would nest calls to `boost::bind`, but I can't figure out how to make it work in the context of a multi-index container.