Boost.MultiIndex. Using several keys together.
Hello, there's a structure struct person { std::string name; std::string surname; int birth_year; std::string craft; }; How to create such a multiindex container that dumping could performed using an index as name, surname and year triple alltogether? -- View this message in context: http://boost.2283326.n4.nabble.com/Boost-MultiIndex-Using-several-keys-toget... Sent from the Boost - Users mailing list archive at Nabble.com.
On 02/04/2014 03:36 PM, syvyi wrote:
Hello,
there's a structure struct person { std::string name; std::string surname; int birth_year; std::string craft; };
How to create such a multiindex container that dumping could performed using an index as name, surname and year triple alltogether? Sounds like you might be interested in MultiIndex's composite key feature:
http://www.boost.org/doc/libs/1_55_0/libs/multi_index/doc/tutorial/key_extra... Jason
What if the composite key should be parameterized from a file?
In the case of
<raw>
struct phonebook_entry{
std::string family_name;
std::string given_name;
std::string phone_number;
phonebook_entry(
std::string family_name,
std::string given_name,
std::string phone_number):
family_name(family_name),given_name(given_name),phone_number(phone_number)
{}};
// define a multi_index_container with a composite key on
// (family_name,given_name)typedef multi_index_container<
phonebook_entry,
indexed_by<
//non-unique as some subscribers might have more than one number
ordered_non_unique<
composite_key<
phonebook_entry,
member
phonebook;
</raw>
the lines
member
On 02/04/2014 03:36 PM, syvyi wrote:
Hello,
there's a structure struct person { std::string name; std::string surname; int birth_year; std::string craft; };
How to create such a multiindex container that dumping could performed using an index as name, surname and year triple alltogether? Sounds like you might be interested in MultiIndex's composite key feature:
http://www.boost.org/doc/libs/1_55_0/libs/multi_index/doc/tutorial/key_extra...
Jason _______________________________________________ Boost-users mailing list [hidden email] http://user/SendEmail.jtp?type=node&node=4658955&i=0 http://lists.boost.org/mailman/listinfo.cgi/boost-users
------------------------------ If you reply to this email, your message will be added to the discussion below:
http://boost.2283326.n4.nabble.com/Boost-MultiIndex-Using-several-keys-toget... To unsubscribe from Boost.MultiIndex. Using several keys together., click herehttp://boost.2283326.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=4658953&code=YWxleGFuZGVyLnN2a0BnbWFpbC5jb218NDY1ODk1M3wxMzU1MTY0OTM5 . NAMLhttp://boost.2283326.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml
-- View this message in context: http://boost.2283326.n4.nabble.com/Boost-MultiIndex-Using-several-keys-toget... Sent from the Boost - Users mailing list archive at Nabble.com.
On 02/04/2014 04:35 PM, syvyi wrote:
What if the composite key should be parameterized from a file?
In the case of <raw> struct phonebook_entry { std::string family_name; std::string given_name; std::string phone_number;
phonebook_entry( std::string family_name, std::string given_name, std::string phone_number): family_name(family_name),given_name(given_name),phone_number(phone_number) {} };
// define a multi_index_container with a composite key on // (family_name,given_name) typedef multi_index_container< phonebook_entry, indexed_by< //non-unique as some subscribers might have more than one number ordered_non_unique< composite_key< phonebook_entry, member
, member > >, ordered_unique< // unique as numbers belong to only one subscriber member > phonebook;
</raw>
the lines member
, member should be auto-generated by reading a composite key from a file.
That use case sounds incompatible with composite keys, which must be defined at compile time. In that case, I would recommend creating individual indices on the container for each field that you might want to use at runtime, but you would lose the composite key functionality. Jason
syvyi
What if the composite key should be parameterized from a file?
OK, this can be done, but you need to move some of the container
definition components from compile time to run time. The following
typedef std::function
person_container;
What we are doing here is reserve 4 slots (we can have more,
of course) to fill at run time with specific key extractors (and their
corresponding compare objects.) For instance, the following
person_container c(
boost::make_tuple(
boost::make_tuple(
boost::make_tuple(
any_person_extractor(member
participants (3)
-
Jason Roehm
-
Joaquin M Lopez Munoz
-
syvyi