Определив следующие псевдонимы,
using namespace std;
template <typename T>
using minheap = priority_queue<T, vector<T>, greater<T>>;
Мне было интересно, есть ли способ инициализировать priority_queue
, просто вызывая конструктор с контейнером (в данном случае, вектором):
minheap<int> queue (vec); // vec is some vector of integers
Но, похоже, это не так.Что работает, так это использование инициализатора на основе диапазона,
minheap<int> queue (vec.begin(), vec.end());
, что довольно уродливо, учитывая, что я хочу использовать весь вектор.
Среди других вариантов инициализации я прочитал следующую опцию: priority_queue (const Compare& comp, const Container& ctnr);
.Но, очевидно, я слишком туп, чтобы понимать C ++, так как выполнение
minheap<int> queue (greater<int>, vec);
тоже не работает.В любом случае я бы подумал, что greater<int>
не понадобится, поскольку я уже явно указал сравнение greater
в объявлении псевдонима minheap
.
Есть ли способ сделать что-то вроде minheap<int> q (vec);
?Или я должен придерживаться (vec.begin(), vec.end())
?