2010-05-07 3 views

ответ

4

Вы можете использовать std::make_heap, std::push_heap и другие напрямую, или вы можете использовать std::priority_queue, построенный на основе std::vector или аналогичного.

Методы std::*_heap находятся в <algorithm> и std::priority_queue шаблон находится в <queue>.

+0

Чтобы уточнить: 'priority_queue ' - это мини-куча с операциями 'push' и' pop' для любого типа 'X', которые можно поместить в контейнер и поддерживать сравнение. – Potatoswatter

+0

ой, если я выскочил из priority_queue в C++, я бы получил значение min? – Alex

+0

Чтобы уточнить, шаблон 'priority_queue' принимает весь тип контейнера, который по умолчанию равен' vector '. Однако любой контейнер, который поддерживает случайную итерацию и 'push_back', будет достаточным. – jemfinch

30

Использовать make_heap() и друзей, определенных в <algorithm>, или использовать priority_queue, определенный в <queue>. priority_queue использует make_heap и друзей внизу.

#include <queue> // functional,iostream,ctime,cstdlib 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    srand(time(0)); 
    priority_queue<int,vector<int>,greater<int> > q; 
    for(int i = 0; i != 10; ++i) q.push(rand()%10); 
    cout << "Min-heap, popped one by one: "; 
    while(! q.empty()) { 
     cout << q.top() << ' '; // 0 3 3 3 4 5 5 6 8 9 
     q.pop(); 
    } 
    cout << endl; 
    return 0; 
} 
+10

+1 для (тонко), указывающего, что 'priority_queue' - максимальная куча. – avakar

Смежные вопросы