在c++中使优先级队列限制其内存

Make a priority queue limit its memory in C++

本文关键字:内存 队列 优先级 c++      更新时间:2023-10-16

我在c++中使用priority_queue<unsigned long,vector<unsigned long>,greater<unsigned long> >,我的内存限制为16MB。我的程序只需要10MB,但是一旦它达到8653464字节,它就会尝试将其容量加倍,并抛出bad_alloc

是否有办法停止使用我当前的实现?如果我从vector切换到deque, priority_queue还能有log(n)时间吗?

切换到deque是非常明智的方法。它以固定的数字增长,而不是像vector那样以x2增长。复杂度应该保持在O(log N)

当然。priority_queue是一个容器适配器,默认情况下它基于vector。我认为解决这个问题最简单的方法是找一个向量的子类它不会变得太大当它接近极限时不会翻倍,而只是接近极限。您也可以使用常规的vector类,但使用自定义分配器,但这可能需要更多的工作。

vector提供比deque更糟糕的复杂性,而deque的增长更可预测和可控。如果您不需要在上帝的绿色地球和蓝色地球上绝对最快的迭代(或对C数组的兼容性),那么deque是所有用途的最佳容器。