我花了一段时间研究这个问题,但尚未找到答案,而且我知道有40多年历史的语言具有各种功能可能会这样做。
我正在寻找一个只能容纳500个整数的数据结构。我需要能够将max int与给定的int进行比较。我还希望结构删除最早插入的,如队列。
是否有支持两者的数据结构?我不需要随机访问,除了在其上运行min()
。
有优先级队列,支持max
,但他们不会自动处理大小。我可以写自己的功能来做这件事,但我想不管怎么说/
答案 0 :(得分:1)
要仅保存500个整数,您需要一个循环缓冲区。它在Boost:
http://www.boost.org/doc/libs/release/doc/html/circular_buffer.html
但这不会帮助你找到容器中的最小值或最大值。为此,你需要这些:
http://en.cppreference.com/w/cpp/algorithm/min_element http://en.cppreference.com/w/cpp/algorithm/max_element http://en.cppreference.com/w/cpp/algorithm/minmax_element
您不能同时完全同时执行这两项操作,因为首先要求删除最旧的元素需要按插入顺序排序,而找到min或max元素的要求需要按某种方式按值排序(线性) ,或像priority_queue
那样的堆。)
在现代机器上查找500个整数的最小值/最大值应该非常快。但是如果你反对线性扫描的算法复杂性,你可以试试这个:
set<int>
中,通过*begin()
和*rbegin()
获取最小值和最大值。