我在执行某个操作时插入元素,并尝试按插入顺序获取元素(这被认为是元素的年龄)。可以使用priority_queues
,但由于它们是作为堆实现的,因此访问top元素的操作是O(1),但是要在下一次迭代中获取下一个元素,我必须执行pop()
致电top()
。 pop()
是log(n)。我想我是否应该使用常规queue
添加元素,只要我将其添加到priority_queue
并保持pop
从队列中获取元素的顺序时间。我的困惑在于,由于我们有一个多线程应用程序,可能会出现无序的元素,因此访问所有元素以确保安全。这将使它成为O(n)
。有人可以帮我选择要使用的数据结构吗?
我应该只使用priority_queue
并每次都在O(log n)
获取元素吗?或者使用堆栈并假设元素的顺序保证并且每次都在O(1)中获取元素?或者使用完全不同的数据结构?
请记住,这是在VC ++中实现的,并且可以访问boost。
希望对此有所了解。谢谢!