【问题标题】:Instantiating priority_queue with deque does not compile - with vector it does. Why is that?使用 deque 实例化 priority_queue 不会编译 - 使用 vector 可以。这是为什么?
【发布时间】:2023-03-02 21:20:02
【问题描述】:

在下面的程序中为什么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;
}

【问题讨论】:

标签: c++ vector priority-queue deque


【解决方案1】:

您错过了将deque&lt;int&gt; 指定为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;

这就是其他版本编译的原因。

【讨论】:

    猜你喜欢
    • 2017-09-03
    • 2011-07-18
    • 2013-10-05
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多