मैं शुद्ध एसटीएल (मैं बूस्ट का उपयोग नहीं करना चाहता!) का उपयोग कर एलएफयू (कम बार-बार उपयोग किया जाता है) कैश को लागू करने की कोशिश कर रहा हूं।एसटीएल का उपयोग कर एलएफयू कैश को कैसे कार्यान्वित करें?
आवश्यकताओं हैं: किसी भी तत्व को
- साहचर्य पहुँच
std::map
के साथ एकKey
की तरह इस्तेमाल करते हैं। - सबसे कम प्राथमिकता आइटम को रिलीज़ करने की क्षमता (
UsesCount
विशेषता का उपयोग करके)। - किसी भी आइटम की प्राथमिकता (
UsesCount
) को अपडेट करने की क्षमता।
समस्याएं हैं:
- अगर मैं साहचर्य का उपयोग और
std::make_heap
,std::push_heap
औरstd::pop_heap
के लिए वेक्टर के लिए iterators के एक कंटेनर के रूप में वस्तुओं के कंटेनर (Key
,Value
,UsesCount
),std::map
रूपstd::vector
का उपयोग वेक्टर के भीतर प्राथमिकता कतार कार्यान्वयन के रूप में, मानचित्र में itertors ढेर परिचालन के बाद मान्य नहीं हैं। - अगर मैं पिछले विन्यास में
std::list
(याstd::map
) के बजायstd::vector
उपयोग करते हैं,std::make_heap
आदि उनके iterators क्योंकि संकलित नहीं किया जा सकता aritmetic समर्थन नहीं करता। - यदि मैं
std::priority_queue
का उपयोग करना चाहता हूं, तो मेरे पास आइटम प्राथमिकता अपडेट करने की क्षमता नहीं है।
प्रश्न हैं:
- मैं कुछ स्पष्ट कर इस समस्या को हल किया जा सकता लापता हूँ?
- क्या आप मुझे उदाहरण के रूप में पिछले आवश्यकताओं को एलएफयू कैश की बैठक के कुछ शुद्ध सी ++/एसटीएल कार्यान्वयन के लिए इंगित कर सकते हैं?
आपकी अंतर्दृष्टि के लिए धन्यवाद।
"मानचित्र में उपरोक्त ढेर संचालन के बाद मान्य नहीं हैं" - इसे अन्य तरीकों से करने के द्वारा ठीक करें - डेटा को 'मानचित्र' में रखें, जहां अन्य तत्व डाले जाने पर भी इसे स्थानांतरित नहीं किया जाएगा/मिट। फिर अपने वेक्टर में मैप इटरेटर्स डालें और इससे एक ढेर बनाएं। आप शायद किसी आइटम की प्राथमिकता को कुशलता से अपडेट करने की क्षमता खो देंगे, हालांकि, यह कोई जवाब नहीं है। –
एक और विचार के लिए धन्यवाद जो मेरे दिमाग को पार नहीं करता है। लेकिन अगर मेरे पास 'std :: map' iterators का 'std :: vector' होगा, तो मैं उनके तुलना ऑपरेटर को कैसे परिभाषित कर सकता हूं, जो' UsesCount' विशेषता 'पर पॉइंट ऑब्जेक्ट के अंदर दिखाई देगा, ताकि' आइटम प्रविष्टि या 'UsesCount' अपडेट के बाद std :: make_heap'? – Blackhex
तुलनात्मक मिक्सर का उपयोग करके: 'बूल ऑपरेटर() (मैपइटर ए, मैपइटरबी) {एक ए-> दूसरा। यूसेउंट < b-> सेकेंड। यूसेउंट; } ' – Useless