у меня есть 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 ++.
myContType_by_time::iterator itTime = idIndex.lower_bound(timestamp);
if(itTime!=idIndex.begin())--itTime;
Других решений пока нет …