【发布时间】:2018-06-25 06:07:54
【问题描述】:
来自 C++ Primer 和 https://en.cppreference.com/w/cpp/container/priority_queue,我知道:
priority_queue 需要随机访问 除了 front、push_back 和 pop_back 操作;
我还从 Google 阅读了这个 blog post 并知道:
- push:向队列中添加一个新元素,
- pop:移除队列中最大的元素,
- top:访问队列中最大的元素。
push应该由push_back实现,没问题。
而pop 和top 似乎在同一个元素上运行。一个是访问它,另一个是删除它。所以我觉得这两个操作应该由pop_front()和front()或者pop_back()和back()来实现。
所以我很困惑,为什么要求front()和pop_back()?
例如,假设底层容器是 vector 并带有一些 int 元素,比如 1,2,3,4,5,6。适配器接口“pop(),top()”如何与底层的“front(),pop_back()”协同工作?
【问题讨论】:
-
@Someprogrammerdude 我只是无法理解优先级队列的接口与(底层容器的)最小操作要求之间的联系。我的意思是,为什么最不需要的是
push_back、pop_back和front。 (push_back当然很容易理解) -
pop用于删除top元素。所以我认为底层操作也应该针对相同的元素,对吧?假设vector、pop_back()和front()不针对同一个元素。 -
我认为这是因为优先队列的实现是通过堆发生的。见stackoverflow.com/questions/2974470/…
标签: c++