Мне нужна структура данных, которая всегда содержит n
самых больших элементов, вставленных до сих пор (в произвольном порядке).
Итак, если n
равно 3, у нас может быть следующий сеанс, где я вставлю несколько чисел, и содержимое контейнера изменится:
[] // now insert 1
[1] // now insert 0
[1,0] // now insert 4
[1,0,4] // now insert 3
[1,4,3] // now insert 0
[1,4,3] // now insert 3
[4,3,3]
Вы поняли идею. Как называется структура данных? Какой лучший способ реализовать это? Или это в какой-то библиотеке?
Я думаю использовать контейнер, который имеет priority_queue
для своих элементов (делегирование), который использует обратное сравнение, поэтому pop
удалит наименьший элемент. Таким образом, функция insert
сначала проверяет, больше ли новый элемент для вставки, чем самый маленький. Если это так, мы выбрасываем это наименьшее и выталкиваем новый элемент.
(Я имею в виду реализацию C++
, но вопрос, тем не менее, не зависит от языка.)