"लेकिन एसटीएल :: priority_queue मेरे लिए काम नहीं करता है, क्योंकि मैं खोजने के लिए कि क्या एक तत्व (एक नोड वस्तु) या priority_queue में है नहीं, अपने डेटा का उपयोग करने और अगर यह संशोधित करने की आवश्यकता ज़रूरी।"
आप अच्छी तरह से एक उपयुक्त Compare
वर्ग पैरामीटर प्रदान वर्ग के किसी भी प्रकार के लिए ऐसा कर सकते हैं।
std::priority_queue<T>
को की अवधारणा का अनुपालन करने के लिए अंतर्निहित Container
की आवश्यकता है।
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
आप std::priority_queue<T>::front()
संदर्भ का पता लग सकता है, और कतार के माध्यम से पुनरावृति, कुछ मामलों को खोजने के लिए।
तुम सच में वस्तुओं के विशिष्ट विद्यमान उदाहरणों, कि कुछ प्राथमिकता एल्गोरिथ्म द्वारा अतिरिक्त प्रबंधित किया जाना चाहिए की आवश्यकता है, तो यह एक अच्छा विचार स्मार्ट संकेत स्टोर करने के लिए हो सकता है (उदाहरण के लिए std::shared_ptr<T>
), बल्कि मूल्यों या कच्चे संकेत से । Compare
कक्षा को निश्चित रूप से उचित रूप से अनुकूलित करने की आवश्यकता है।
struct CompareNodes {
bool operator
(const std::shared_ptr<Node>& lhs
, const std::shared_ptr<Node>& rhs
) {
// Provide some operation to compare lhs < rhs (less) results in true
// This function is meant to determine the actual priority of your Node
// instances, when referenced in the priority_queue<> in question.
}
};
std::priority_queue
< std::shared_ptr<Node>
, std::vector<std::shared_ptr<Node>>
, CompareNodes
> myQueue;
"अपने डेटा का उपयोग करने और यदि आवश्यक हो यह संशोधित करने के लिए।"
std::shared_ptr
साथ प्राथमिकता कतार के रूप में ऊपर नमूने में बताया गया हो सकता है का उपयोग करना भी भी से आप जारी कतार में उदाहरणों खोजने की जरूरत है, और मूल उदाहरण से डेटा संशोधनों सिंक्रनाइज़।
स्रोत
2014-11-02 14:43:06
क्या आप इसके सामने() और फिर से उपयोग नहीं कर सकते? – 2501
बूस्ट :: बिमाप के बारे में क्या? –
ध्यान दें कि मानक लाइब्रेरी कंटेनर आमतौर पर अक्षम होने पर संचालन प्रदान करने से बचते हैं। सामान्य प्राथमिकता कतार कार्यान्वयन (एक ढेर का उपयोग करके) में, खोज और सदस्यता परीक्षण में ओ (एन) जटिलता होती है, शायद यही कारण है कि यह ऑपरेशन अंतर्निहित नहीं है। यह आपके आवेदन के लिए कोई समस्या हो सकती है या नहीं भी हो सकती है। सदस्यता के लिए आपको कितनी बार परीक्षण करने की आवश्यकता है इस पर ध्यान दें। –