【发布时间】:2018-05-23 09:52:20
【问题描述】:
我在执行某个操作时插入元素,并尝试按插入顺序(这被认为是元素的年龄)获取元素。 priority_queues 可以使用,但由于它们是作为堆实现的,因此访问顶部元素的操作是 O(1),但要在下一次迭代中获取下一个元素,我必须执行 pop() 以及调用top()。 pop() 是 log(n)。我正在考虑是否应该只使用常规的queue 来添加元素,只要我将其添加到priority_queue 中,并从队列中保留poping 以按添加时间的顺序获取元素。我的困惑是,由于我们有一个多线程应用程序,是否会有元素乱序,因此可以安全地访问所有元素以确保。这将使它成为O(n)。有人可以帮助我选择要使用的数据结构吗?
我是否应该继续使用priority_queue 并每次都在O(log n) 中获取元素?还是使用堆栈并保证元素的顺序并每次都在 O(1) 中获取元素?还是使用完全不同的数据结构?
请记住,这是在 VC++ 中实现的,并且可以访问 boost。
想对此发表看法。谢谢!
【问题讨论】:
-
“我在执行某个操作时插入元素,并尝试按插入顺序获取元素” ... 为什么这不仅仅是一个 FIFO 队列?
-
是的,这就是为什么我在考虑是否应该只使用队列 (FIFO) 但正在考虑,因为它是多线程的并且可能会以某种方式弄乱顺序。如果它们永远不会发生,我宁愿使用它。
-
每个线程都需要自己的队列吗?或者你可能需要这样的东西:ridgesolutions.ie/index.php/2014/01/31/…?
标签: multithreading algorithm sorting c++11 boost