Ответ 1
Нет. Это невозможно (с предопределенными контейнерами). Контейнеры последовательности стандартной библиотеки С++ имеют:
- O (1) произвольный доступ и O (N) вставка/удаление или
- O (N) случайный доступ и O (1) вставка/удаление
Обратите внимание, что deque
является исключением, но только тогда, когда вставка/удаление происходит на концах массива. Общий случай все еще равен O (N).
Кроме того, классификация итераторов не включает категорию для этого случая. У вас есть двунаправленные итераторы (те list
, set
, multiset
, map
и multimap
), которые берут O (N) раз, чтобы перейти в случайную позицию, а следующая категория - случайная итераторы доступа (те vector
, deque
и string
). Нет промежуточной категории.
Добавление новой категории вообще не будет тривиальным. В библиотеке также реализовано множество алгоритмов (например, for_each
), которые работают с контейнерами. Существует реализация для каждой категории итераторов.
Деревья статистики заказов были предложены в Boost несколько раз. Насколько я знаю:
- 2004: Первое предложение (я не знаю, было ли это реализовано)
- 2006: "Структуры иерархических данных"
- 2006: AVL Array (переименован в "Ранковый список" в Boost)
- 2012: Дерево счетчиков
Основная трудность для их принятия заключалась в обобщенном мнении о том, что они не являются преимуществом, а представляют опасность. Сегодня программисты используются для решения всех проблем, которые они знают, с типичными контейнерами. Опытные программисты опасаются, что новички могут вслепую использовать предлагаемый контейнер для всего, вместо того, чтобы тщательно выбирать.