Такая структура данных была бы потрясающей, и, насколько я знаю, не существует . Другие указали на это.
Но вы можете пойти дальше, если вам все равно, что все это немного сложнее.
Если вы можете «тратить» немного памяти и некоторые усилия на программирование, вы можете одновременно использовать различные структуры данных , объединяя преимущества каждой из них.
Например, мне нужна была отсортированная структура данных, но я хотел иметь O (1) поисков ("это элемент X в коллекции?"), А не O (log n ). Я объединил TreeMap с HashMap (который на самом деле не O (1), но почти , когда он не слишком полный и функция хеширования хороша) и я получил действительно хорошие результаты.
В вашем конкретном случае я бы выбрал динамическую комбинацию между HashMap и пользовательской вспомогательной структурой данных. Я думаю о чем-то очень сложном (хэш-карта + очередь с переменной длиной приоритета), но я приведу простой пример. Просто сохраните все содержимое в HashMap, а затем используйте специальное поле (currentMax
), которое содержит только элемент max
на карте. Когда вы insert()
в вашей объединенной структуре данных, если элемент, который вы собираетесь вставить,> чем текущий max
, тогда вы делаете currentMax <- elementGoingToInsert
(и вставляете его в HashMap).
Когда вы удаляете элемент из вашей объединенной структуры данных, вы проверяете, равен ли он currentMax
, и если он есть, вы удаляете его с карты (это нормально), и вы должны найти новый max
(в O (n)). Итак, вы делаете currentMax <- findMaxInCollection()
.
Если max
меняется не очень часто, это чертовски хорошо, поверьте мне.
Однако не принимайте ничего как должное. Вам нужно немного потрудиться, чтобы найти лучшую комбинацию между различными структурами данных. Пройдите тесты, узнайте, как часто max
меняется. Структуры данных не легки, и вы можете изменить ситуацию, если вы действительно работаете, комбинируя их, а не находите волшебную, которой не существует. :)
Приветствия