в правильном порядке, они могут приходить и в неправильном. Надо их расскладывать сообразно временному порядку. Вопрос. Какую структуру данных для этого имеет смысл применить?
Зависит от того что с этими сообщениями будет дальше. Навскидку подойдёт priority queue
priority queue перекладывать же будет
хм... а зачем нам порядок сообщений?
Сортированный вектор? Если неправильный порядок - редкий, то и вставка не в конец будет редкой
поясню: "раскладывать сообразно временному порядку" немного хамелеон внутрь, черный ящик декларирует своё внутреннее устройство, когда должен декларировать внешний интерфейс; если предположить (а) сообщения приходят позже нормы, потому что отдельные сообщения запаздывают (статистически - редко) (б) через много времени, достаточное для прибытия последнего опоздавшего, нас попросят перечислить всех прибывших (в) многопоточности нет то вроде бы правильный ответ такой: держим две очереди, одну обычную, другую PQ (для опоздавших) на выходе выполняем аналог std::merge
ну вставка в центр это O(n) , а btree это грубо говоря дерево векторов
А чего такого он делает?
элементы двигает, разумеется, как вектор
в общем, this, и можете побенчмаркать - добавление десятка миллионов элементов по одному в порядке возрастания в priority_queue вроде бы сработает быстрее, чем в std::list :)
https://github.com/microsoft/STL/blob/52505b9d3249c50b33eb22152a1f18f208ea2959/stl/inc/deque#L1365
А в чём криминал?
Так он же их внутри одного блока только двигает.
Все двигает. Структура не может вставлять в середину за 1 и находить элемент по индексу за 1
если не повезет, то будет тупо все двигать
Обсуждают сегодня