Здравствуйте, 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 только сейчас узнал).