2010-05-07 15 views
11

मैं सी ++ के लिए बहुत नया हूं, और मैं सोच रहा था कि मानक पुस्तकालय से सी ++ में न्यूनतम ढेर बनाने का कोई तरीका था या नहीं।क्या सी ++ में न्यूनतम ढेर बनाने का कोई आसान तरीका है?

+2

आप प्रश्न पूछते हैं और किसी को स्वीकार नहीं करते हैं। आदत या पसंद से यह व्यवहार है? – Siddharth

उत्तर

4

आप std::make_heap, std::push_heap, और अन्य सीधे उपयोग कर सकते हैं, या आप या इसी तरह के std::priority_queue का उपयोग कर सकते हैं।

std::*_heap विधियां <algorithm> में हैं, और std::priority_queue टेम्पलेट <queue> में है।

+0

स्पष्टीकरण के लिए: 'priority_queue ' किसी भी प्रकार के 'एक्स'' के लिए संचालन 'पुश' और' पॉप' के साथ एक न्यूनतम ढेर है जिसे एक कंटेनर में रखा जा सकता है और तुलना का समर्थन करता है। – Potatoswatter

+0

ओह तो यदि मैं C++ में primary_queue से पॉप किया गया तो मुझे न्यूनतम मान मिलेगा? – Alex

+0

आगे स्पष्टीकरण के लिए, 'priority_queue' का पूरा टेम्पलेट एक कंटेनर प्रकार स्वीकार करता है, जो 'वेक्टर ' पर डिफ़ॉल्ट होता है। यादृच्छिक पुनरावृत्ति और 'push_back' का समर्थन करने वाला कोई भी कंटेनर पर्याप्त होगा, हालांकि। – jemfinch

30

make_heap() और <algorithm> में परिभाषित मित्रों का उपयोग करें, या <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 (subtly) के लिए +1 इंगित करता है कि 'प्राथमिक_queue' एक अधिकतम-ढेर है। – avakar

संबंधित मुद्दे