2010-05-07 2 views

답변

4

std::make_heap, std::push_heap 및 기타를 직접 사용할 수도 있고 std::vector 또는 이와 유사한 방법으로 std::priority_queue을 사용할 수도 있습니다.

std::*_heap 방법 <algorithm>에 있으며 std::priority_queue 템플릿 <queue>이다.

+0

명확히하기 :'priority_queue '은 컨테이너에 넣을 수 있고 비교를 지원할 수있는'X' 형에 대해'push'와'pop' 연산을하는 min-heap입니다. – Potatoswatter

+0

오, 그래서 내가 C에서 priority_queue에서 터지면 + + 내가 최소 값을 얻을 줄 알아요? – Alex

+0

'priority_queue'의 전체 템플릿은 컨테이너 타입을 받아들입니다. 기본값은'vector '입니다. 그러나 임의의 반복과 'push_back'을 지원하는 컨테이너라면 충분할 것이다. – jemfinch

30

<algorithm>에 정의 된 make_heap() 및 친구를 사용하거나 <queue>에 정의 된 priority_queue을 사용하십시오. priority_queuemake_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

관련 문제