【问题标题】:What is the best data structure to extract elements in descending order in O(1) time在 O(1) 时间内按降序提取元素的最佳数据结构是什么
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-04
    • 2013-02-04
    • 2012-02-23
    • 2013-07-27
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 2017-12-09
    相关资源
    最近更新 更多