2011-03-16 11 views
5

में "बाध्य प्राथमिकता कतार" का नि: शुल्क कार्यान्वयन मैं सीमाबद्ध प्राथमिकता कतार सी ++ में अमूर्तता का एक मुफ्त सॉफ़्टवेयर कार्यान्वयन की तलाश में हूं। असल में, मुझे एक डेटा संरचना की आवश्यकता है जो std::priority_queue की तरह व्यवहार करेगी, लेकिन हर समय "सर्वश्रेष्ठ" n तत्वों को हमेशा "सर्वोत्तम" बनाएगा।सी ++

उदाहरण:

std::vector<int> items; // many many input items 
bounded_priority_queue<int> smallest_items(5); 
for(vector<int>::const_iterator it=items.begin(); it!=items.end(); it++) { 
    smallest_items.push(*it); 
} 
// now smallest_items holds the 5 smallest integers from the input vector 

किसी को भी इस तरह के बात का एक अच्छा कार्यान्वयन की पता है? इसके साथ कोई अनुभव?

+2

मुझे लगता है कि यह http://stackoverflow.com/questions/2933758/priority-queue-with-limited-space-looking-for-a-good-algorithm –

+0

में शामिल है, खरीदारी के सवाल कभी नहीं चूसते हैं। –

उत्तर

1

मुझे लगता है कि this thread में चर्चा की गई एल्गोरिदम शायद आप जो खोज रहे हैं। यदि आप एक प्रमुख शुरुआत करना चाहते हैं, तो आप बूस्ट के कार्यान्वयन d_ary_heap_indirect पर बिल्डिंग पर विचार करना चाहेंगे जो Boost.Graph (d_ary_heap.hpp में) का हिस्सा है। यदि आप इसके साथ अच्छी नौकरी करते हैं, तो आप इसे बूस्ट में जमा कर सकते हैं। यह एक अच्छा छोटा जोड़ा कर सकता है, क्योंकि इस तरह के एक कार्यान्वयन में निश्चित रूप से कई उपयोग हैं।

0

एक स्टडी :: वेक्टर का उपयोग एक मज़ेदार/तुलनात्मक फ़ंक्शन और std :: sort() के साथ सही क्रम में क्यों न करें? कोड शायद बहुत छोटा है

+3

कुछ मामलों में एक ढेर से काफी खराब प्रदर्शन कर सकता है। –