unique_ptr比较器的优先级队列
priority queue of unique_ptr comparator
我有一个存储shared_ptr<obj>
的优先级队列。 在这些 OBJ 中,有一个返回某个值的方法,例如obj.method1()
返回一个int
。我想按此值的升序对队列进行排序。我尝试在同一个文件中编写一个比较类,但是当我将其添加为第三个参数时,它说使用未声明的标识符(我无法访问实际运行代码的主函数)我也尝试使用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()
的项目(因为我们本质上是在method1()
值而不是共享指针上运行默认比较器std::less
)。另请参阅std::priority_queue
上的 cppreference.com 条目。
相关文章:
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 打印优先级队列
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 排序数组优先级队列
- 更改运行时优先级队列的排序功能
- 优先级队列构造函数的工作
- 实现优先级队列
- 优先级队列功能比较
- 在C++中打印对的优先级队列的所有值时出现问题
- 使用堆的优先级队列,具有相同键的值不遵循 FIFO(先进先出)
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 是否可以使用简单队列创建优先级队列
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- Cython中带有自定义比较器的优先级队列
- 优先级队列比较器[C++].
- asio::io_service 具有多个线程的优先级队列处理