使用双端队列实例化priority_queue不会编译-使用矢量时会编译。为什么会这样?

时间:2019-03-16 10:34:43

标签: c++ vector priority-queue deque

在下面的程序中,为什么用deque进行构造失败,但是用vector进行构造可以

两者均提供priority_queue期望的功能和RandomAccess迭代器。我看不出原因。

我在C ++ 98,C ++ 11和C ++ 14上进行了测试:see test program

#include <vector>
#include <deque>
#include <queue>

using namespace std;

int main()
{
    deque<int> d; 
    priority_queue<int> q(d.begin(), d.end());

    vector<int> v; 
    priority_queue<int> q1(less<int>(), v); //compiles

    deque<int> d1; 
    priority_queue<int> q2(less<int>(), d1); //does not compile

    return 0;
}

1 个答案:

答案 0 :(得分:4)

您错过了将deque<int>指定为priority_queue的模板参数:

deque<int> d1; 
priority_queue<int,deque<int>> q2(less<int>(), d1); 
                // ^^^^^^^^^^

请参见工作示例here

请参阅std::priority_queue的参考文档。 std::vector被用作模板的默认类型参数:

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

这就是为什么要编译其他版本的原因。