Frage

ich gegoogelt und gesucht in den Menschen zu steigern, aber nicht fand keine Beispiele. sein kann, es ist eine dumme Frage ... wie auch immer.

So wir das berühmte Telefonbuch von dem Mann haben:

typedef multi_index_container<
  phonebook_entry,
  indexed_by<
    ordered_non_unique<
      composite_key<
        phonebook_entry,
        member<phonebook_entry,std::string,&phonebook_entry::family_name>,
        member<phonebook_entry,std::string,&phonebook_entry::given_name>
      >,
      composite_key_compare<
        std::less<std::string>,   // family names sorted as by default
        std::greater<std::string> // given names reversed
      >
    >,
    ordered_unique<
      member<phonebook_entry,std::string,&phonebook_entry::phone_number>
    >
  >
> phonebook;


phonebook pb;
...
// look for all Whites
std::pair<phonebook::iterator,phonebook::iterator> p=
  pb.equal_range(boost::make_tuple("White"), my_custom_comp());

Wie soll my_custom_comp () aussehen? Ich meine, es für mich klar ist, dann dauert es boost::multi_index::composite_key_result<CompositeKey> als ein argumen (wegen Übersetzungsfehlern :)), aber was ist CompositeKey in diesem speziellen Fall?

struct my_custom_comp
{
    bool operator()( ?? boost::multi_index::composite_key_result<CompositeKey> ?? ) const
    {
        return blah_blah_blah;
    }
};

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Es sollte aussehen wie composite_key_compare . Für Ihren Fall (Nicht-Template-Version):

typedef composite_key<
    phonebook_entry,
    member<phonebook_entry,std::string,&phonebook_entry::family_name>,
    member<phonebook_entry,std::string,&phonebook_entry::given_name>
  > my_comp_type_t;

struct my_custom_comp
{
    bool operator()( 
        const boost::tuple<const char*>& x,
        const boost::multi_index::composite_key_result<my_comp_type_t>& y ) const
    {
        return false; // should return something instead of false
    }
    bool operator()( 
        const boost::multi_index::composite_key_result<my_comp_type_t>& y,
        const boost::tuple<const char*>& x ) const
    {
        return false; // should return something instead of false
    }
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top