unique_ptr 比较器的优先级队列
priority queue of unique_ptr comparator
我有一个存储 shared_ptr<obj>
的优先级队列。在这些 obj 中,有一种方法 returns 某个值,例如 obj.method1()
将 return 和 int
。我想按此值的升序对队列进行排序。我尝试在同一个文件中写一个比较 class 但是当我将它添加为第三个参数时它说使用未声明的标识符(我无权访问实际运行代码的主要功能)我也试过使用 std::greater<shared_ptr<Searchable>>
作为第三个参数,但我不确定这是否是写入解决方案。任何帮助将不胜感激。
priority_queue<shared_ptr<obj>, vector<shared_ptr<obj>>, std::greater<shared_ptr<obj>> > Q;
这就是我现在拥有的,但我不认为它能像我想要的那样工作
这对你有用吗?
#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()
的商品(因为我们本质上 运行 std::less
,默认比较器,在 method1()
值而不是共享指针上)。另见 cppreference.com entry on std::priority_queue
.
我有一个存储 shared_ptr<obj>
的优先级队列。在这些 obj 中,有一种方法 returns 某个值,例如 obj.method1()
将 return 和 int
。我想按此值的升序对队列进行排序。我尝试在同一个文件中写一个比较 class 但是当我将它添加为第三个参数时它说使用未声明的标识符(我无权访问实际运行代码的主要功能)我也试过使用 std::greater<shared_ptr<Searchable>>
作为第三个参数,但我不确定这是否是写入解决方案。任何帮助将不胜感激。
priority_queue<shared_ptr<obj>, vector<shared_ptr<obj>>, std::greater<shared_ptr<obj>> > Q;
这就是我现在拥有的,但我不认为它能像我想要的那样工作
这对你有用吗?
#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()
的商品(因为我们本质上 运行 std::less
,默认比较器,在 method1()
值而不是共享指针上)。另见 cppreference.com entry on std::priority_queue
.