Re[4]: Быстрый поиск байта в фрагменитованном файле
От: _smit Россия  
Дата: 23.12.15 19:50
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>Здравствуйте, _smit, Вы писали:



_>>Поиск выглядит так:

W>
_>>            {return (value.data_offset_pos + value.fragment_length) <= ref.data_offset_pos;});
W>

W>И не боишься передавать в lower_bound компаратор нарушающий strict weak ordering?

_>>Предварительно создал вектор индексов, каждый элемент индекса имеет три параметра: номер фрагмента, длина фрагмента и номер байта полезных данных, с которого начинается фрагмент.

W>Считаю, проще будет если использовать только последний параметр из трёх. Тогда выполнение функции сразу начинается с вызова lower_bound, а все проверки уже делаются для возвращённого итератора. Сейчас же есть как минимум несколько избыточных проверок на частные случаи, часть из которых к тому же маскирует проблему с плохим компаратором.

W>Уж лучше вместо них кеширование последнего ответа добавить, чтобы поиск не делать, если ожидается последовательный доступ к содержимому.


С избыточностью проверок и кешированием последнего ответа согласен, поправлю. на счет лямбды было бы хорошо, если бы был unary_lower_bound, но -std=c++0x его не поддерживает. Как лучше компаратор реализовать, чтобы не нарушать strict weak ordering? (признаться про существование strict weak ordering только сейчас узнал).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.