优先级队列Objective-C++?

  发布于 2023-02-07 17:22

我正在研究路径查找算法,并希望实现优先级队列来加速它.

我正在Node根据属性将我的Object 添加到队列中fScore.最小的fScore总是添加到队列的顶部.

我有什么选择?最好使用stl实现c ++优先级队列吗?如果是这样,我将如何设置它以接收我的objective-c对象Node以及如何指定列表的订单(Node.fScore).

谢谢

1 个回答
  • 因为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
    

    2023-02-07 17:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有