Интервальная карта в 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