I need a data structure that always holds the n
largest items inserted so far (in no particular order).
So, if n
is 3, we could have the following session where I insert a few numbers and the content of the container changes:
[] // 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]
You get the idea. What's the name of the data structure? What's the best way to implement this? Or is this in some library?
I am thinking to use a container that has a priority_queue
for its elements (delegation), which uses the reverse comparison, so pop
will remove the smallest element. So the insert
function first checks if the new element to be inserted is greater than the smallest. If so, we throw that smallest out and push the new element.
(I have a C++
implementation in mind, but the question is language-agnostic nevertheless.)