unique_ptr比较器的优先级队列

时间:2019-11-01 20:13:32

标签: c++ priority-queue

我有一个存储shared_ptr<obj>的优先级队列。在这些obj中,有一个返回特定值的方法,例如obj.method1()将返回int。我想按此值的升序对队列进行排序。我尝试在同一文件中编写一个比较类,但是当我将其作为第三个参数添加时,它说使用了未声明的标识符(我无法访问实际运行代码的主函数),我也尝试使用{{1 }}作为第三个参数,但是我不确定这是否是写解决方案。任何帮助将不胜感激。

std::greater<shared_ptr<Searchable>>

这就是我现在所拥有的,但是我不认为它像我想要的那样工作

1 个答案:

答案 0 :(得分:0)

这对您有用吗?

#include <memory>
#include <queue>
#include <vector>

class obj {
public:
    int method1() const { return 123; }
};

using obj_ptr = std::shared_ptr<obj>;

class obj_ptr_comparator {
    int operator()(const obj_ptr& lhs, const obj_ptr& rhs) 
    {
        return lhs.get()->method1() < rhs.get()->method1();
    }    
};

std::priority_queue<obj_ptr, std::vector<obj_ptr>, obj_ptr_comparator> my_queue;

为了澄清:您将获得my_queue.pop()的商品将是最高值为method1()的商品(因为我们实际上是在运行{{1 }}(默认比较器,位于std::less值上,而不是共享指针上)。另请参见cppreference.com entry on std::priority_queue