C++ 解释默认优先级队列::top()的行为?
默认情况下,C++ 解释默认优先级队列::top()的行为?,c++,stl,priority-queue,C++,Stl,Priority Queue,默认情况下,std::priority_队列使用std::vector和std::less比较器。默认情况下,优先级队列是最大堆 各国: top元素是在priority\u队列中比较高的元素,在调用priority\u队列::top时从容器中删除的下一个元素 此成员函数有效地调用底层容器对象的memberfront 因此,一个默认构造的优先级\u队列由如下构造的整数组成: auto maxheap = priority_queue<int>(); maxHeap.push(1); m
std::priority_队列使用std::vector
和std::less
比较器。默认情况下,优先级队列是最大堆
各国:
top元素是在priority\u队列中比较高的元素,在调用priority\u队列::top
时从容器中删除的下一个元素
此成员函数有效地调用底层容器对象的memberfront
因此,一个默认构造的优先级\u队列
由如下构造的整数组成:
auto maxheap = priority_queue<int>();
maxHeap.push(1);
maxHeap.push(3);
cout << maxHeap.top(); // outputs 3
由于std::less
按升序排序,因此调用vec.front()
最终返回的值最小
我对priority\u queue::top()
的默认行为和文档内容的理解有些脱节。有人能给我解释一下吗?你使用了错误的算法,你可以在
std::priority\u队列
不使用std::sort
,而是使用std::make\u heap
如果您在示例中也使用它,您将获得预期的输出
std::向量队列{1,3};
std::make_heap(queue.begin()、queue.end()、std::less{});
标准::cout
auto vec = vector<int>{3, 1};
sort(vec.begin(), vec.end(), less<int>()); // {1, 3}
cout << vec.front(); // outputs 1