我正在尝试查找动态填充的列表的前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
我想念什么?
答案 0 :(得分:0)
reserve
不能以您认为的方式工作。它只是为项目预分配(保留)空间。如果添加的项目多于保留的项目,则将增加容纳新项目的能力。