Здравствуйте, _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)
Всё, других проверок и условий не нужно.