2012-03-28 8 views
2

Angenommen, ich habe folgendes:equal_range auf einer Taste, unten/oben auf einem anderen gebunden im Boost-multi_index_container composite_key

struct Person 
{ 
    std::string mName; 
    Birthday mBirthday; 
}; 

using namespace boost::mult_index; 
typedef multi_index_container< 
    Person, 
    ordered_non_unique< 
     composite_key< 
      Person, 
      member<Person, std::string, &Person::mName>, 
      member<Person, Birthday, &Person::mBirthday> 
     > // composite_key 
    > // ordered_non-unique 
> PersonContainer; // mult_index_container 

PersonContainer personContainer; 

... 

std::pair<PersonContainer::iterator, PersonContainer::iterator> similarPeople 
    = personContainer.equal_range(boost::make_tuple("Bob","01/15/65")); 

Das würde mir einen Iterator Bereich, in dem jeder Iterator auf eine Person hingewiesen namens ‚Bob‘ geboren auf "01/15/65".

Was ist, wenn ich einen Iteratorbereich haben möchte, der mir alle Personen im Container namens "Bob" aber zwischen '01/01/65 'und '01/31/65' gegeben hat? Dies ist effektiv ein equal_range auf 'Bob', aber eine untere und obere Grenze an Geburtstagen. Ist das möglich? Wenn ja bitte erklären wie?

Danke!

Antwort

3

Der gewünschte Bereich ist [lower_bound(make_tuple("Bob","01/01/65")), upper_bound(make_tuple("Bob","01/31/65"))].