equal_range для одной клавиши, нижняя / верхняя граница для другой в boost multi_index_container композитный_ключ - PullRequest
2 голосов
/ 28 марта 2012

Предположим, у меня есть следующее:

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"));

Это дало бы мне диапазон итераторов, где каждый итератор указывал на Человека по имени 'Боб', родившегося '01 / 15/65 '.

Что, если мне нужен диапазон итераторов, который дал бы мне всех людей в контейнере с именем 'Bob', но при рождении между '01 / 01/65 'и '01 / 31/65'? Это фактически равный диапазон для «Боба», но нижняя и верхняя граница для дней рождения. Это возможно? Если да, объясните, пожалуйста, как?

Спасибо!

1 Ответ

3 голосов
/ 28 марта 2012

Требуемый диапазон: [lower_bound(make_tuple("Bob","01/01/65")), upper_bound(make_tuple("Bob","01/31/65"))).

...