2010-12-11 134 views
3

我有一个C++的大学编程项目分为两部分。我开始使用priority_queues,hash tablesBST的第二部分。列表到优先队列

我在使用优先级队列的麻烦(至少),因为它承付自己重做了很多的第一部分已经实现的代码。

该项目是关于实施简单的机场管理系统,因此,我有像机场(主类),飞机,终端和飞行类。我有机场终端的list,但现在项目规范指出,我必须保持终端的priority_queue其中顶部包含终端少占用,即具有较小的航班。

对于每个类,我有CRUD功能,但现在,我怎么,例如,编辑终端和飞行补充呢?有了列表,我只需迭代到一个特定的位置,但现在我只能访问队列顶部的对象。我想过的解决方案是将优先级队列终端复制到临时列表中,但是,老实说,我不喜欢这种方法。

我该怎么办?

在此先感谢。

+0

你知道如何从优先级队列中检索项目?你知道如何插入优先队列吗?准确的用户界面有什么要求?为什么你确实认为你被要求将终端保存在一个优先级队列中? – 2010-12-11 12:42:51

+0

@Karl Knechtel:'top()'检索第一个元素,'push'插入一个元素并且'pop'去除第一个元素。我需要在实现中为每个类添加CRUD函数。如果你有一个机场来管理,系统必须让用户执行所有的典型操作:**创建**'飞机',**创建**'航班',**创建**终端, **联合**'飞机'和'航班',**联合**'航班'和'终端'。在我写'添加'的地方,它可以被其他** CRUD **函数(读取,更新和删除)替代。 – 2010-12-11 12:51:46

+1

当您必须使用优先级队列时,您只能使用优先级队列吗?或者,您是否允许在优先级队列和散列表或BST中存储指向终端的指针? – outis 2010-12-11 12:58:31

回答

2

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

priority_queue容器非常适合动态集。但是由于机场中的终端数量几乎是固定的,你可以使用堆算法家族的一个固定大小的容器。

作为内部存储,可以使用可提供随机访问迭代器(矢量,阵列,双端队列)的任何容器。然后,使用make_heap(),sort_heap()系列函数来对数组进行heapify。现在,您可以便宜地访问top(),修改堆中随机成员的优先级并轻松遍历所有元素。

举个例子看看: http://www.cplusplus.com/reference/algorithm/make_heap/