【问题标题】:c++ Data Structure that remains sorted by value & operates FIFO保持按值排序并操作FIFO的c ++数据结构
【发布时间】:2012-05-03 00:44:00
【问题描述】:

我正在寻找一种执行快速排序插入并基于FIFO进行操作的数据结构。

我想要实现的是一个固定大小的数据结构来保存一系列值。在迭代的每个新步骤中,我希望能够有效地找到最小值或最大值(因此我希望始终对数据结构进行排序),并且在请求插入新元素时,自动将最旧的元素(或至少能够有效地)弹出/丢弃。

所以我想我正在寻找某种 FIFO 优先级队列。

非常感谢任何帮助。

【问题讨论】:

  • 那张海报询问的是“元素不需要以任何方式排序”的数据结构。我需要固定大小、FIFO 并让它始终保持排序。
  • 这不适合:msdn.microsoft.com/en-us/library/4ef4dae9.aspx?根据容器的大小,我只会使用向量或双端队列,并在需要时应用algorithm 函数sortminmax,它应该仍然足够快满足您的需求
  • 我将这样做数百万次并且作为实时过程的一部分,所以我最初的想法是不断地重新排序并不是最好的方法。跨度>
  • 如果网络能保持足够长的时间,让我再试一次:实际的欺骗是stackoverflow.com/questions/5329312/…,它显然错误地指向了那个。

标签: c++ data-structures stack heap priority-queue


【解决方案1】:

为什么不同时拥有一个 std::set 或 multiset,以及一个像 std::queue 这样的常规 FIFO 队列?每次插入时,检查队列是否大于您的最大大小,然后从队列和集合中删除最前面的元素。

【讨论】:

  • 我可以看到不断从队列头部或指针堆中弹出是多么有效。但是,从集合中连续删除操作的效率如何?
  • 根据sgi.com/tech/stl/SortedAssociativeContainer.html,给定迭代器的擦除是O(1)。
  • 好酷...我现在想我可以使用 Boost Circular Buffer 来存储指针。在“运行期”之后,只需在每次迭代中弹出前面的元素即可。
  • 对于任何来到这个线程的人......我现在发现显然人们正在寻找的是 LRU(最近最少使用)地图,或 LRA(最近最少添加)地图,具体取决于您的需要.
猜你喜欢
  • 2015-08-13
  • 1970-01-01
  • 2015-05-21
  • 2019-08-22
  • 1970-01-01
  • 2013-02-04
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多