设置提升优先级队列的最大大小

时间:2019-05-29 00:59:09

标签: c++11 boost priority-queue

我正在尝试查找动态填充的列表的前n个项目。我认为优先队列将是解决此问题的好方法。由于我只需要前n个,因此除了存储我的计算所需的'n'个项目外,别无所求。我无法在boost库中找到似乎能够设置优先级队列限制的任何内容

我尝试使用reserve(element_count)函数。医生说该函数用于“为element_count元素保留空间”。但这不符合我的想法

这是我正在编写的一些示例代码。这不是用例。

int main()
{
        int maxSize = 2; // Priority Queue (pq) is expected to hold a maximum of 2 elements at any time
        boost::heap::priority_queue<int> pq; // Declaration
        pq.reserve(maxSize); // I assumed this would reserve space only for 2 elements and anything more would over write the existing ones based on comparison
        pq.push(3);
        pq.push(2);
        pq.push(1); // Push should fail
        cout << "Size = " <<pq.size() << " Max Size = " << (int)pq.max_size(); 
        for (int i=0; i<maxSize; i++)
        {
                int a = pq.top();
                pq.pop();
                cout << a <<"\n";
        }
        return 0;
}

我希望结果是:
大小= 2最大大小= 2
3
2

但是我得到的是:

大小= 3 最大大小= -1
3
2

我想念什么?

1 个答案:

答案 0 :(得分:0)

reserve不能以您认为的方式工作。它只是为项目预分配(保留)空间。如果添加的项目多于保留的项目,则将增加容纳新项目的能力。