错误,c++,struct,priority-queue"/>

首页 > 解决方案 > 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));

标签: c++structpriority-queue

解决方案


您的代码中有两个主要问题。

首先,您的 priority_queue 属于std::pair<int, position>,但您正试图推入std::pair<int, position*>.

其次,std::greater<T>取决于>底层类型的运算符T。在您的情况下,它是std::pair<int, position>,其>运算符取决于(请参阅此参考)的<运算符。您需要提供for ,或者,您可以使用自定义的比较函子类型。position<position


推荐阅读