我正在研究路径查找算法,并希望实现优先级队列来加速它.
我正在Node
根据属性将我的Object 添加到队列中fScore
.最小的fScore
总是添加到队列的顶部.
我有什么选择?最好使用stl实现c ++优先级队列吗?如果是这样,我将如何设置它以接收我的objective-c对象Node
以及如何指定列表的订单(Node.fScore
).
谢谢
因为std:: priority_queue
,如果你使用ARC,你应该有90%的方式.STL容器将自动存储强引用.赢得!
您需要创建自定义比较类.
typedef std::priority_queue<MyClass *, std::vector<MyClass *>, MyClassCompare> MyPriorityQueue;
我不确定你将如何实现你的比较类.它看起来像:
class MyClassCompare { bool operator()(MyClass *lhs, MyClass *rhs) const { // magic!!! Be sure to return a bool. } };
MyClassQueue.h
@interface MyClassQueue : NSObject @property (nonatomic, readonly) MyClass *topObject; @property (nonatomic, readonly) NSUInteger count; - (void)pushObject:(MyClass *)myObject; - (void)popObject; - (void)popAllObjects; @end
MyClassQueue.mm
#import "MyClassQueue.h" #include <queue> #import "MyClass.h" class MyClassCompare { bool operator()(MyClass *lhs, MyClass *rhs) const { // magic!!! Be sure to return a bool. } }; typedef std::priority_queue<MyClass *, std::vector<MyClass *>, MyClassCompare> MyPriorityQueue; @interface MyClassQueue () @property (nonatomic) MyPriorityQueue *queue; @end @implementation MyClassQueue - (MyClass *)topObject { return !self.queue->empty() ? self.queue->top() : nil; } - (NSUInteger)count { return (NSUInteger)self.queue->size(); } - (void)pushObject:(MyClass *)myObject { self.queue->push(myObject); } - (void)popObject { if (!self.queue->empty()) { self.queue->pop(); } } - (void)popAllObjects { if (!self.queue->empty()) { delete _queue; _queue = new MyPriorityQueue(); } } - (instancetype)init { self = [super init]; if (self != nil) { _queue = new MyPriorityQueue(); } return self; } - (void)dealloc { delete _queue; _queue = NULL; } @end