c++ - STL priority_queue 对错误
问题描述
在网格中寻找最短路径并努力正确设置优先级队列。
struct position{
int row;
int col;
position* parent;
position(int a, int b):row(a),col(b), parent(nullptr){}
};
vector<position>vec;
priority_queue<pair<int, position>, vector<pair<int, position>>, greater<pair<int, position>>>pq;
int distance = 0;
position *t = new p(0,0);
pq.push(make_pair(distance, t));
收到此错误:
no matching function for call to ‘std::priority_queue, std::vector >, std::greater > >::push(std::pair)’
pq.push(make_pair(distance, t));
解决方案
您的代码中有两个主要问题。
首先,您的 priority_queue 属于std::pair<int, position>
,但您正试图推入std::pair<int, position*>
.
其次,std::greater<T>
取决于>
底层类型的运算符T
。在您的情况下,它是std::pair<int, position>
,其>
运算符取决于(请参阅此参考)的<
运算符。您需要提供for ,或者,您可以使用自定义的比较函子类型。position
<
position
推荐阅读
- javascript - 我可以在我的 java Spring + Thymeleaf 项目中使用 Tabulator js 库吗?
- javascript - 如何在每个 div 上切换具有不同效果的多个 div
- wpf - 带有 Caliburn.Micro 的 WPF 动态上下文菜单
- python - 如何重命名 Sahana Eden 中的模块?
- c - 从结构位域以十六进制打印完整的 uint32_t
- parsing - 使用 Epsilon 或 Lambda 的语法
- mule - Anypoint Studio 和 Mule 中文件连接器文件路径字段的通配符是什么
- prolog - 在哪里可以找到有关 Prolog 中的证明控制的资源/信息
- c# - 清除datagridview重复行并保留唯一行
- intellij-idea - WebStorm 运行/调试允许多个脚本