为什么我的代码使用priority_queue不能编译

Why my code using priority_queue cannot compile?

本文关键字:queue 不能 编译 priority 我的 代码 为什么      更新时间:2023-10-16

尝试使用priority_queue。代码是:

    struct HeapNode
    {
        int val;
        int row;
        int col;
        HeapNode(int a, int b, int c) : val(a), row(b), col(c) {}
    };
    class MyComparator
    {
     public:
        bool operator()(HeapNode &n1, HeapNode &n2)
        {
            return n1.val < n2.val;
        }
    };
    void myfunction()
    {
        std::priority_queue<HeapNode, std::vector<HeapNode>,  MyComparator> hp1;   //LINE1
        std::priority_queue<HeapNode, MyComparator> hp2; //LINE2
    }

尝试了LINE1和LINE2所示的两种方法。

std::priority_queue在构造函数中接受3个参数:

template<
    class T,
    class Container = std::vector<T>,
    class Compare = std::less<typename Container::value_type>
> class priority_queue;

在您的例子中LINE1看起来很好,应该可以编译。错误消息是什么?

LINE2你试图创建std::priority_queue自定义类型(HeapNode)与容器"MyComparator"(不是容器!)。

用于存储元素的底层容器的类型。的容器必须满足SequenceContainer的要求。此外,它还必须提供下列功能语义:front(), push_back(), pop_back()。标准容器Std::vector和Std::deque满足这些要求。

http://en.cppreference.com/w/cpp/container/priority_queue

"MyComparator"不是一个容器,它不支持必需的方法。

我检查了你的代码LINE2注释掉,它编译。你算上和了吗?有main函数吗?