Звучит так, как будто вы хотите упорядоченную структуру данных, то есть (сбалансированный) BST. Вставка и удаление действительно были бы O (lg n ), что достаточно для многих приложений. Если вы также хотите, чтобы элементы имели индекс в структуре , то вам нужно дерево статистики заказов (см., Например, CLR, Введение в алгоритмы , глава 14), которая обеспечивает эту операцию в O (LG N ). Динамическая повторная сортировка всей коллекции будет O ( n lg n ).
Если под «порядком в коллекции» вы подразумеваете, что любой случайный порядок достаточно хорош, тогда просто используйте динамический массив (вектор): амортизированные O (1), добавление и удаление, O ( n lg *) 1019 * n ) сортировка на месте, но поиск O ( n ), пока вы не выполните сортировку, после чего поиск становится O (lg n ) с двоичным поиском. Однако удаление будет O ( n ), если данные останутся отсортированными.
Если ваши данные похожи на строки, вы можете расширить дерево таким же образом, как BST, чтобы стать деревом статистики заказов.