Pet*_*der 54
C++标准库中有四个已排序的容器:
std::set - 排序的唯一值序列.
std::map - 唯一键/值对的排序序列.
std::multiset - 排序的值序列(可能的重复).
std::multimap - 键/值对的排序序列(可能的重复).
如果你只是想要一个排序的队列,那么你要找的是std::priority_queue,它是一个容器适配器,而不是一个独立的容器.
#include <queue>
int main()
{
std::priority_queue<int> q;
q.push(2);
q.push(3);
q.push(1);
assert(q.top() == 3); q.pop();
assert(q.top() == 2); q.pop();
assert(q.top() == 1); q.pop();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果您想将自己的类型存储在a中,priority_queue则需要operator<为您的类定义.
class Person
{
public:
Person(int age) : m_age(age) {}
bool operator<(const Person& other) const
{
return m_age < other.m_age;
}
private:
int m_age;
};
Run Code Online (Sandbox Code Playgroud)
创建priority_queue的Person则s会给你在前面的最古老的一队人.
Aas*_*set 20
您好像正在寻找std::priority_queue位于<queue>头文件中的.使用push(),您可以将元素插入优先级队列; 使用top(),您将获得队列中当前最大的元素(或者最小的元素,具体取决于您的实现方式operator<); 并且pop(),您将删除最大/最小元素.
据我所知,它是用堆实现的,这使得每个推送和弹出操作的时间复杂度为O(lg n).只需查看顶部元素即可在O(1)中完成.
| 归档时间: |
|
| 查看次数: |
37952 次 |
| 最近记录: |