2008-09-24 10 views
10

मानचित्र आसानी से काम करने के लिए महान हैं, लेकिन वे मेमोरी हॉग हैं और कैशिंग मुद्दों से पीड़ित हैं। और जब आपके पास एक महत्वपूर्ण पाश में नक्शा होता है जो खराब हो सकता है।क्या कोई भी सी ++ std :: मानचित्र प्रतिस्थापन कंटेनर की सिफारिश कर सकता है?

तो मैं सोच रहा था कि अगर कोई अन्य कंटेनर की सिफारिश कर सकता है जिसमें एक ही एपीआई है लेकिन उपयोग करता है तो पेड़ कार्यान्वयन के बजाय वेक्टर या हैश कार्यान्वयन कहता है। मेरा लक्ष्य यहां कंटेनरों को स्वैप करना है और मानचित्र पर निर्भर सभी उपयोगकर्ता कोड को फिर से लिखना नहीं है।

अद्यतन: प्रदर्शन बुद्धिमान सबसे अच्छा समाधान एक एसटीडी पर एक परीक्षण किया मानचित्र मुखौटा :: वेक्टर

उत्तर

4

देखें Loki::AssocVector और/या hash_map होगा (एसटीएल कार्यान्वयन के सबसे यह एक है)।

+0

यह मूल रूप से एक क्रमबद्ध std :: vector > मानचित्र-जैसे इंटरफ़ेस के साथ है। लाइसेंस इसे बाहर निकालने और कहीं भी अपनी परियोजना में चिपकने के लिए पर्याप्त अनुमत है। –

+0

क्षमा करें मैं अभी तक जवाब देखने के लिए वापस नहीं आया था, लेकिन यह वही है जो मुझे चाहिए! धन्यवाद एक सही ड्रॉप-इन (मेरे पास उपयोग के मामलों पर विचार करने) –

2

यदि आपकी कुंजी एक साधारण प्रकार है जिसे बहुत तेज़ी से तुलना किया जा सकता है और आपके पास कुछ हज़ारों प्रविष्टियां नहीं हैं, तो आप अपने जोड़ों को std::vector में डालकर और अपना मूल्य ढूंढने के लिए बेहतर प्रदर्शन करके बेहतर प्रदर्शन कर सकते हैं।

+0

आदर्श रूप से यह सबसे अच्छा समाधान होगा, लेकिन मैं वेक्टर के इंटरफ़ेस/रैपर को मानचित्र संगत होने के लिए लिखना (और डीबग) नहीं करना चाहता हूं। क्या आप इस तकनीक के किसी भी कार्यान्वयन के बारे में जानते हैं? –

+0

दुर्भाग्य से नहीं। –

+1

'boost :: property_map' अवधारणाओं का सेट और विशेष रूप से' boost :: vector_property_map' जो आप ढूंढ रहे हैं ... –

11

आप std :: tr1 :: unordered_map का उपयोग कर सकते हैं, जो कि अधिकांश एसटीएल कार्यान्वयन में पहले से मौजूद है, और सी ++ 0x मानक का हिस्सा है।

template <class Key, 
      class T, 
      class Hash = std::tr1::hash<Key>, 
      class Pred = std::equal_to<Key>, 
      class Alloc = std::allocator<std::pair<const Key, T> > > 
class unordered_map; 
+0

मैंने std :: tr1 :: unordered_map का उपयोग नहीं किया है, लेकिन अगर यह STLport के हैश_मैप जैसा कुछ भी है , अगर मैं एक सामान्य कार्यान्वयन std :: मैप की तुलना में एक बड़ा स्मृति हॉग है तो आश्चर्यचकित नहीं होगा और समान रूप से खराब स्थानिक इलाके है। – bk1e

+0

यह अब सी ++ 11 है :)। – Kos

6

शायद Google SparseHash आप मदद कर सकता है:

यहाँ यह वर्तमान हस्ताक्षर है?

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

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