2013-09-21 6 views
6

सी ++ "मानक लाइब्रेरी" में, कोई भी "सहयोगी" (यानी "कुंजी-मूल्य") कंटेनर/डेटा संरचना है, जिसमें प्रविष्टि को व्यवस्थित करने के लिए आदेश को संरक्षित करने की क्षमता है?सी + 11 एसोसिएटिव कंटेनर जो सम्मिलन आदेश रखता है?

मैंने इस पर कई विषयों को देखा है, हालांकि, ऐसा लगता है, सी ++ 11 से पहले।

कुछ "boost :: multi_index" का उपयोग करने का सुझाव देते हैं, लेकिन, यदि संभव हो तो, मैं मानक कंटेनर/संरचनाओं का उपयोग करूंगा।

मुझे लगता है कि सी ++ 11 में कई, स्पष्ट रूप से, "unordered" सहयोगी कंटेनर हैं: link

इनमें से कोई भी, किसी भी तरह से, "कॉन्फ़िगर करने योग्य" है, जैसे कि वे केवल सम्मिलन आदेश द्वारा क्रमबद्ध हैं?

धन्यवाद!

सी

+2

बस एक unordered_map और एक वेक्टर का उपयोग करें – aaronman

+1

क्या आप 'std :: vector >' ढूंढ रहे हैं? –

+0

तो आप जावा के * LinkedHashMap * के बराबर चाहते हैं? – hyde

उत्तर

1

सं

आप यादृच्छिक साथ रैखिक पहुँच मिश्रण कर रहे हैं। बहुत अच्छा बिस्तर साथी नहीं है।

बस पूर्व में एक इंडेक्स का उपयोग कर मानचित्र के साथ vector/list (यानी सम्मिलन का क्रम) दोनों का उपयोग करें।

+2

वे बहुत अच्छे बेडफेलो हैं, जब इसकी आवश्यकता होती है, तो बहुत अच्छा होता है, और इस तरह के कंटेनर को छोटे-छोटे कार्यान्वयन-वार भी होते हैं। यदि सी ++ में कोई नहीं है, तो मैं थोड़ा आश्चर्यचकित हूं। उदाहरण: http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html – hyde

+0

@hyde - यह सिर्फ दो डेटा संरचनाओं को एक साथ जोड़ रहा है। दो - एक नहीं। –

+0

हैशमैप पहले से ही कई डेटा संरचनाओं का संयोजन है, इसलिए मुझे नहीं लगता कि इससे क्या अंतर होता है ... प्रविष्टि का आदेश हैशैप को अभी भी बहुत कम कोड की आवश्यकता है, एक वर्ग के अंदर लपेटा जाना चाहिए और निश्चित रूप से बिल्कुल एक ही इंटरफ़ेस प्रदान करना चाहिए सामान्य unordered हैशप के रूप में। ध्यान दें कि सम्मिलन आदेश रखने से क्रमबद्ध क्रम को बनाए रखने के विपरीत, एल्गोरिदमिक दक्षता प्रभावित नहीं होती है। – hyde

0

नहीं; इस तरह की क्षमता प्रदर्शन के नाम पर जाहिर तौर पर बलिदान किया गया था।

समकक्ष वस्तुओं का क्रम रीहैश समेत संचालन में संरक्षित होना आवश्यक है, लेकिन मूल आदेश निर्दिष्ट करने का कोई तरीका नहीं है। सिद्धांत रूप में, आप std::rotate का उपयोग कर सकते हैं या प्रत्येक प्रविष्टि के बाद ऑब्जेक्ट को वांछित क्रम में अनुमति देना चाहते हैं। जाहिर है अव्यवहारिक, लेकिन यह साबित करता है कि क्षमता की कमी थोड़ा मनमानी है।

आपकी सबसे अच्छी शर्त बाद के कंटेनर में बाद में रखना है। आप इस तरह के "गहरे" कंटेनर पर पुनरावृत्त करने के लिए एक इटरेटर एडाप्टर का उपयोग कर सकते हैं जैसे कि यह एक अनुक्रम था। बूस्ट में ऐसी उपयोगिता शायद पाई जा सकती है।

0

सं। अनियंत्रित मानचित्रों में भी, सम्मिलन के आदेश के अनुसार संग्रहित नहीं किया जाता है।

आप कुंजी का ट्रैक रखने के वेक्टर उपयोग कर सकते हैं!

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