मैं सी में एक "विरल" वेक्टर वर्ग बनाने के लिए कोशिश कर रहा हूँ ++, इसलिए जैसे के लिए:ओवरलोडिंग ऑपरेटर [] एक विरल वेक्टर
template<typename V, V Default>
class SparseVector {
...
}
आंतरिक रूप से, यह एक std::map<int, V>
द्वारा प्रतिनिधित्व किया जाएगा (जहां V
है संग्रहीत मूल्य का प्रकार)। यदि मानचित्र में कोई तत्व मौजूद नहीं है, तो हम दिखाएंगे कि यह टेम्पलेट तर्क से Default
मान के बराबर है।
हालांकि, मुझे सबस्क्रिप्ट ऑपरेटर, []
अधिभार में परेशानी हो रही है। मुझे []
ऑपरेटर अधिभारित करना होगा, क्योंकि मैं इस वर्ग से ऑब्जेक्ट को बूस्ट फ़ंक्शन में पास कर रहा हूं जो []
को सही तरीके से काम करने की अपेक्षा करता है।
const
संस्करण काफी आसान है: जांच करें कि सूचकांक मानचित्र में है या नहीं, तो इसके मूल्य को वापस करें, या Default
अन्यथा।
हालांकि, गैर-कॉन्स संस्करण के लिए मुझे संदर्भ वापस करने की आवश्यकता है, और यही वह जगह है जहां मैं परेशानी में भाग लेता हूं। यदि मान केवल पढ़ रहा है, तो मुझे मानचित्र में कुछ भी जोड़ने की आवश्यकता नहीं है (न ही चाहते हैं); लेकिन अगर यह लिखा गया है, तो मुझे संभवतः मानचित्र में एक नई प्रविष्टि डालने की आवश्यकता है। समस्या यह है कि ओवरलोडेड []
यह नहीं जानता कि कोई मान या लिखा पढ़ा गया है या नहीं। यह केवल एक संदर्भ देता है।
क्या इस समस्या को हल करने का कोई तरीका है? या शायद इसके आसपास काम करने के लिए?
boost :: mapped_vector <> कुछ ऐसा करना चाहिए - आप इसे विचारों के लिए पढ़ सकते हैं (या शायद इसका उपयोग कर सकते हैं)। –
यह मेरे डिफ़ॉल्ट मानों का समर्थन नहीं करता है, और साथ ही, मैं इसे दो-आयामी मैट्रिक्स के लिए करने जा रहा था, इसलिए इसका उपयोग सीधे प्रश्न से बाहर है। लेकिन अभी भी एक उपयोगी संदर्भ! – Thomas