-Insertion and Deletion: Это возможно для любого контейнера STL, но вопрос в том, сколько времени потребуется, чтобы сделать это.Любой контейнер связанного списка (list, map, set) будет делать это в постоянное время, в то время как контейнеры, подобные массиву (vector), будут делать это за линейное время (с постоянным амортизированным распределением).
-Sorting:Учитывая, что вы можете хранить отсортированную коллекцию всегда, это не большая проблема, любой контейнер STL позволит это.Для карты и набора вам не нужно ничего делать, они уже позаботятся о том, чтобы коллекция всегда была отсортирована.Для вектора или списка вы должны выполнить эту работу, то есть вы должны выполнить бинарный поиск места, куда идут новые элементы, и вставить их туда (но в алгоритмах STL есть все необходимые для этого части).
-Резорт: Если вам нужно взять текущую коллекцию, отсортированную по правилу A, и применить коллекцию к правилу B, это может быть проблемой.Контейнеры, такие как map и set, параметризованы (как тип) правилом сортировки, это означает, что для его преобразования вам потребуется извлечь каждый элемент из исходной коллекции и вставить их в новую коллекцию с новым правилом сортировки.Однако, если вы используете векторный контейнер, вы можете просто использовать функцию сортировки STL в любое время, чтобы прибегнуть к какому-либо правилу.
-Random Access: вы сказали, что вам нужен произвольный доступ.Лично мое определение произвольного доступа означает, что любой элемент в коллекции может быть доступен (по индексу) за постоянное время.С этим определением (которое я считаю вполне стандартным) любая реализация связанного списка не подходит, и она оставляет вам единственную возможность использования массива-подобного контейнера (например, std :: vector).
Заключение, чтобы иметь все эти свойства, вероятно, было бы лучше использовать std :: vector и реализовать собственную сортированную вставку и отсортированное удаление (выполняя бинарный поиск в векторе, чтобы найти удаляемый элемент или место для вставки нового элемента),Если ваши объекты, которые вам нужно сохранить, имеют значительный размер, а данные, по которым они сортируются (имя, идентификатор и т. Д.), Невелики, вы можете рассмотреть возможность разделения проблемы, держа несортированный список связанных объектов (сполная информация) и сохранение отсортированного вектора ключей вместе с указателем на соответствующий узел в связанном списке (в этом случае, конечно, используйте std :: list для первого и std :: vector для второго).
Кстати, я не большой специалист по контейнерам STL, так что, возможно, я ошибся в вышесказанном, подумайте сами.Изучите STL для себя, я уверен, что вы найдете то, что вам нужно, или, по крайней мере, все, что вам нужно.Может быть, посмотрите на библиотеки Boost тоже.