2011-10-18 10 views
5

मैं सोच रहा था कि सी ++ एसटीएल priority_queue स्वयं ही कहता है। मेरा मतलब यह है कि insert यह सही जगह पर है जब आप push आइटम में हैं, या यह स्वयं को सॉर्ट करता है और आपको peek या pop पर उच्च प्राथमिकता का आइटम देता है? मैं यह पूछ रहा हूं क्योंकि मेरे priority_queue<int> में एक सरणी में एक इंडेक्स होगा जिसमें मूल्य अपडेट हो सकते हैं, और जब मैं pq.top(); करता हूं तो मैं इसे अपडेट करना चाहता हूं।एक std :: primary_queue <> स्वयं को क्रमबद्ध करता है?

#include <cstdio> 
#include <algorithm> 
#include <queue> 
using namespace std; 

int main() { 
    priority_queue<int> pq; 
    pq.push(2); 
    pq.push(5); //is the first element 5 now? or will it update again when I top() or pop() it out? 
    return 0; 
} 

धन्यवाद।

+0

आप आसानी से उन गुणों की खोज कर सकते क्योंकि जैसे 'map' यह एक तुलना विधेय लेता है। यदि आप एक तुलना की भविष्यवाणी करते हैं जो प्रत्येक तुलना में कंसोल (उदाहरण के लिए) पर प्रिंट करता है, तो जब आप इसे बुलाया जाता है तो आप लाइव देखेंगे (और किस मान पर)। –

उत्तर

10

काम push() और pop(), जो अंतर्निहित ढेर संशोधन कार्य (push_heap() और pop_heap()) कॉल के दौरान किया जाता है। top() लगातार समय लेता है।

+0

बहुत बढ़िया, यह वही है जो मैं सुनना चाहता था। समय सीमा समाप्त हो जाने के बाद मैं इसे उत्तर के रूप में चिह्नित करूंगा। –

+1

उदाहरण [यहां] (http://www.sgi.com/tech/stl/priority_queue.html) व्यवहार को वास्तव में अच्छी तरह से प्रदर्शित करता है –

+0

@StanleyCen: Glad I मदद कर सकता है, हालांकि मैंने वास्तव में जानकारी को बंद कर दिया [कुछ वेबसाइट ] (http://www.cplusplus.com/reference/stl/priority_queue/pop/) ... –

1

यह एक प्रकार का होता है जब कोई नया तत्व डाला जाता है या एक मौजूदा हटा दिया जाता है। This might help

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