I'd like to use lower_bound
with the value_type
of a Boost MultiIndex Container. So far, I only managed to make this work by explicitly extracting the members:
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/composite_key.hpp>
#include <boost/multi_index/member.hpp>
#include <string>
struct name {
std::string firstname;
std::string lastname;
name(const std::string & firstname, const std::string & lastname) :
firstname(firstname), lastname(lastname) {}
};
typedef boost::multi_index::multi_index_container<
name,
boost::multi_index::indexed_by<
boost::multi_index::ordered_unique<
boost::multi_index::composite_key<
name,
boost::multi_index::member<name, std::string, &name::lastname>,
boost::multi_index::member<name, std::string, &name::firstname>
>,
boost::multi_index::composite_key_compare<
std::less<std::string>,
std::less<std::string>
>
>
>
> NameIndex;
int main(void) {
NameIndex nameindex;
nameindex.insert(name("Alfred", "Ammer"));
nameindex.insert(name("Martin", "Mauser"));
// In my real code, I get this object passed.
name lookupname("Hans", "Hoffer");
// Does not compile
//auto it = nameindex.get<0>().lower_bound(lookupname);
// compiles, but I have to take explicitly list the members - in the right order
auto it = nameindex.get<0>().lower_bound(std::make_tuple(lookupname.lastname, lookupname.firstname));
}
How can I avoid extracting the members?