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

_>Как лучше компаратор реализовать, чтобы не нарушать strict weak ordering?

Не <=, а просто < (или std::less, если угодно).

_> на счет лямбды было бы хорошо, если бы был unary_lower_bound, но -std=c++0x его не поддерживает.


Ну вот сейчас в m_index_list находится массив троек. Хотя достаточно было бы хранить лишь поле .data_offset_pos, то есть использовать обычный массив целых чисел. Тогда вся работа сведётся к единственному вызову
const auto it = lower_bound(m_index_list.begin(), m_index_list.end(), data_pos);

тут проверка, что fragment_index существует (т.е. it != end(m_index_list)) 

const size_t fragment_index = it - m_index_list.begin();

тут проверка, что data_pos принадлежит границам найденного фрагмента (это и так уже делается в функции Packet::at)

Всё, других проверок и условий не нужно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.