Интервальная карта в C++

Мне нужно сопоставить некоторые интервалы (на самом деле это интервалы адресов) с идентификаторами объектов.

Я попытался использовать интервал boost_map, пример выглядит очень красиво, он легко перечисляет все интервалы, например:

while(it != party.end())
{
    interval<ptime>::type when = it->first;
    // Who is at the party within the time interval 'when' ?
    GuestSetT who = (*it++).second;
    cout << when << ": " << who << endl;
}

Какие выводы:

    ----- История гостей вечеринки -------------------------
    [2008-May-20 19:30:00, 2008-May-20 20:10:00): Гарри Мэри
    [2008-May-20 20:10:00, 2008-May-20 22:15:00): Диана Гарри Мэри Сьюзан
    [2008-май-20 22:15:00, 2008-май-20 23:00:00): Диана Гарри Мэри Питер Сьюзен
    [2008-май-20 23:00:00, 2008-май-21 00:00:00): Диана Питер Сьюзан
    [2008-май-21 00:00:00, 2008-май-21 00:30:00): Питер

но он не может сделать что-то вроде этого:

interval<ptime>::type when = 
    interval<ptime>::closed(
        time_from_string("2008-05-20 22:00"),
        time_from_string("2008-05-20 22:01"));

    GuestSetT who = party[when];

    cout << when << ": " << who << endl;

выводит: error: нет совпадения для 'operator[]' в 'party[when]', это выглядит странно, так как основная функция map находится в operator []

поэтому я не могу получить информацию "кто был на вечеринке в данное время"

Есть ли готовое решение этой проблемы?

1 ответ

Это несколько нелогично, но вы ищете оператор (). Из документов оператор () определяется как "Возврат отображенного значения для ключа х. Оператор доступен только для итоговых карт".

Источник: http://www.boost.org/doc/libs/1_54_0/libs/icl/doc/html/boost_icl/function_reference/selection.html

Другие вопросы по тегам