为什么使用priority_queue的代码无法编译?

时间:2015-09-26 05:02:46

标签: c++

尝试使用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所示。 这两行都不能通过编译。

1 个答案:

答案 0 :(得分:0)

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 中,您尝试使用容器“MyComparator”(不是容器!)创建自定义类型(HeapNode)的std :: priority_queue。

  

用于存储元素的基础容器的类型。该   容器必须满足SequenceContainer的要求。   此外,它必须提供通常的以下功能   语义:front(),push_back(),pop_back()。标准容器   std :: vector和std :: deque满足这些要求。

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

“MyComparator”不是Container,也不支持所需的方法。

我检查了你的代码 LINE2 已注释掉它并编译。你有包括吗?你有什么主要功能吗?