【发布时间】:2021-02-13 08:13:10
【问题描述】:
std::priority_queue,默认使用std::vector<int> 和std::less 比较器。默认情况下,priority_queue 是一个最大堆。
docs for top() 声明:
top 元素是在
priority_queue中比较高的元素,下一个在调用priority_queue::top时从容器中移除。此成员函数有效地调用底层容器对象的成员
front。
因此,一个默认构造的整数 priority_queue 构造如下:
auto maxheap = priority_queue<int>();
maxHeap.push(1);
maxHeap.push(3);
cout << maxHeap.top(); // outputs 3
然而,回到top() 的描述,文档指出,实际上调用了底层容器对象上的成员front。如果我创建一个向量并使用std::less 进行排序来模拟我们的maxHeap 的底层容器:
auto vec = vector<int>{3, 1};
sort(vec.begin(), vec.end(), less<int>()); // {1, 3}
cout << vec.front(); // outputs 1
因为std::less按升序排序,所以调用vec.front()最终会返回最小值。
我对@987654336@ 的默认行为和文档所说的内容的理解有些脱节。有人可以向我解释一下吗?
【问题讨论】:
标签: c++ stl priority-queue