在O(1)时间

时间:2017-12-09 07:34:56

标签: multithreading algorithm sorting c++11 boost

我在执行某个操作时插入元素,并尝试按插入顺序获取元素(这被认为是元素的年龄)。可以使用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。

希望对此有所了解。谢谢!

1 个答案:

答案 0 :(得分:1)

因为,你要找的是一个简单的FIFO,我建议你使用一些线程安全队列,而且我确信boost已经实现了一些线程安全队列,如message queue