列出优先级队列

时间:2010-12-11 12:38:23

标签: c++ list iterator priority-queue

我在C ++中有一个大学编程项目,分为两部分。我开始使用priority_queueshash tablesBST的第二部分。

我遇到了(至少)有优先级队列的问题,因为它有义务重做已经在第一部分实现的大量代码。

该项目是关于实施简单的机场管理系统,因此,我有类似机场(主要班级),飞机,航站楼和飞行等课程。我的机场有list个终端,但现在项目规范指出我必须将终端保留在 priority_queue中,其中顶部包含终端较少占用,即较少机票。

对于每个班级,我都有CRUD功能,但现在我怎么想,例如,编辑一个终端并添加一个航班?使用列表,我只需要迭代到一个特定的位置,但现在我只能访问队列顶部的对象。我想到的解决方案是将优先级队列终端复制到临时列表,但老实说,我不喜欢这种方法。

我该怎么办?

提前致谢。

1 个答案:

答案 0 :(得分:2)

听起来你需要一个有效增加和减少关键操作的优先级队列。您可能最好创建自己的优先级队列实现。

priority_queue容器非常适合动态集。但由于机场终端的数量已经相当固定,因此您可以使用堆算法系列来定义固定大小的容器。

作为内部存储,您可以使用任何提供随机访问迭代器(vector,array,deque)的容器。然后,使用make_heap(),sort_heap()函数系列来堆积数组。现在你可以廉价地访问top(),修改堆中随机成员的优先级,并轻松遍历所有元素。

有关示例,请参阅: http://www.cplusplus.com/reference/algorithm/make_heap/