Перегрузка Boost Multi_Index операция поиска

у меня есть boost Multi_index контейнер в разделяемой памяти, в котором хранятся данные для быстрого поиска по нескольким процессам на одной машине.

typedef multi_index_container<
MyData,
indexed_by<
random_access<>,  // keep insertion order
ordered_non_unique< member<MyData, time_t, &MyData::timestamp> >
>
> myContType;

поэтому я хотел бы выполнить поиск в этом контейнере через свойство timestamp что-то вроде этого:

myContType_by_time& idIndex = myCont.get<1>();
myContType_by_time::iterator itTime = idIndex.find(timestamp);

Но проблема в том, что я не ищу точное совпадение. То, что я ищу, это первый элемент, чей предшественник имеет значение меньше, чем время поиска.

Позвольте мне привести пример, давайте предположим, что в моем контейнере есть такие элементы (с этим порядком вставки):

    1       2       3      4       5       6
{109345, 109348, 109352, 109355, 109358, 109362, }

и когда я выполняю поиск с 109354 Я ожидаю найти предмет 4 потому что это первый элемент, чей предшественник меньше, чем критерии поиска.

Можно ли внедрить этот специальный механизм поиска с индексом для быстрого поиска вместо поиска по всему массиву и искать условие одно за другим? (массив может содержать более 100000 элементов)

Благодарю.

Не: я работаю с Visual Studio 2008 VC ++.

1

Решение

myContType_by_time::iterator itTime = idIndex.lower_bound(timestamp);
if(itTime!=idIndex.begin())--itTime;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]