In the below program why does the construction with deque
fail but the construction with vector
is ok?
Both provide the functions and the RandomAccess iterator expected by priority_queue
. I do not see the reason.
I tested it for C++98, C++11 and 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;
}
You missed to specify deque<int>
as template parameter for priority_queue
:
deque<int> d1;
priority_queue<int,deque<int>> q2(less<int>(), d1);
// ^^^^^^^^^^
See the working example here.
See the reference documentation of std::priority_queue
. std::vector
is taken as default type parameter for the template:
template< class T, class Container = std::vector<T>, // <<<<<<<<<<<<<<<< class Compare = std::less<typename Container::value_type> > class priority_queue;
That's why the other version compiles.