Массив, вероятно, будет лучшей структурой данных в этом случае.
Вставка в массив включает в себя поиск правильного слота для нового элемента, а затем смещение всего большего на один элемент вправо, используя memmove
. Это может быть дорогостоящим, если вставки происходят часто, но если они не часты, как вы говорите, тогда это не должно быть проблемой. Затем у вас есть O(1)
поиск по индексу и O(log n)
поиск.
Поддерживать массив указателей на фактические данные - это хороший шаг, поскольку это означает, что при вставке новых элементов вы копируете только указатели, а не полные структуры данных.
Таким образом, у вас есть массив, содержащий данные, к которым добавляются только данные, и массив указателей, которые пересчитываются (то есть находят правильную точку и сдвиг) при каждой вставке.