2013-03-06 5 views
10

मैं सी ++ मानक पुस्तकालय पढ़ रहा हूं: एक ट्यूटोरियल और संदर्भ पुस्तक। नक्शा उदाहरण में:सहयोगी सरणी का अर्थ क्या है?

typedef map<string,float> StringFloatMap; 
    StringFloatMap coll; 

    //insert some elements into the collection 
    coll["VAT"] = 0.15; 
    coll["Pi"] = 3.1415; 
    coll["an arbitrary number"] = 4983.223; 
    coll["Null"] = 0; 

लेखक कहते हैं:

यहाँ, सूचकांक कुंजी के रूप में प्रयोग किया जाता है और किसी भी प्रकार की हो सकती है। यह एक सहयोगी सरणी का इंटरफ़ेस है। एक एसोसिएटिव सरणी एक सरणी है जिसमें सूचकांक मनमाना प्रकार का हो सकता है।

किसी भी एक मुझे समझा सकता है, क्या मनमाना प्रकार साहचर्य सरणी में मतलब है?

+2

इसका मतलब _any_ है। आप 'std :: map' बना सकते हैं जो 'int' को कुंजी,' std :: string' (जैसे आपके उदाहरण में), या यहां तक ​​कि कक्षाओं के उदाहरण भी उपयोग करता है। –

+1

[dictionary.com] से (http://dictionary.reference.com/browse/arbitrary?s=t) 'मनमानी: एक विशिष्ट मान निर्दिष्ट नहीं किया गया', मूल रूप से, सूचकांक कुछ भी हो सकता है; एक स्ट्रिंग, एक पूर्णांक, एक वस्तु ... – jonhopkins

+0

मुझे लगता है कि उम्मीद है कि जोसुटिस इस ** "मनमानी" प्रकार ** पर लगाई गई आवश्यकताओं को समझाने के लिए चला गया है? –

उत्तर

7

Arrays आमतौर पर तत्वों की स्थिति से अनुक्रमित होते हैं। एक साधारण सरणी - int x[10], इसके तत्व x[0] ... x[9] हैं। सूचकांक एक हस्ताक्षरित अभिन्न मूल्य है।

सहयोगी कंटेनर का अर्थ है कि सूचकांक, अच्छी तरह से, एक मनमाना (अनिवार्य रूप से एक हस्ताक्षरित अभिन्न) प्रकार (इस मामले में, std::string) हो सकता है।

2

भेद वैक्टर/सरणियों, जो ज्यादातर लोगों अनुक्रम कंटेनर कहेंगे के बीच है, लेकिन जो वास्तव में चाबियाँ एन 0 से पूर्णांकों की एक पूरी श्रृंखला होने के साथ साहचर्य कंटेनरों के रूप में माना जा सकता है

दूसरी तरफ, मानचित्र कुंजी पर इस तरह के प्रतिबंध नहीं डालते हैं, वे तार, पूर्णांक, किसी भी प्रकार का हो सकता है (बशर्ते कि उस प्रकार पर एक समझदार समानता तुलना ऑपरेटर हो)।

+0

वैसे मैं एरे को पूर्णांक द्वारा अनुक्रमित एसोसिएटिव कंटेनर के रूप में नहीं मानूंगा: 'नक्शा [0]' और 'मानचित्र [1000]' दो ऑब्जेक्ट आवंटित करते हैं, जबकि यह 'वेक्टर [एन]' अगर वेक्टर का उपयोग करने के लिए एक अनिर्धारित व्यवहार है। आकार() '। – FredericS

+0

सी ++ में मानचित्र :: ऑपरेटर [] में स्वचालित निर्माण अर्थशास्त्र * मेरी विनम्र राय में कंटेनरों के सैद्धांतिक वर्गीकरण के साथ कुछ भी नहीं है ... – us2012

+0

मेरा बिंदु (जिसे आप "पूर्ण सीमा" कहकर साझा करते हैं) यह है कि आप एक वेक्टर के साथ मनमानी ** कुंजी ** का उपयोग नहीं कर सकता, केवल एक _sequence_, इस प्रकार मैं इसे एक सहयोगी कंटेनर के रूप में नहीं मानूंगा। – FredericS

2

इसका मतलब है कि आप एक नक्शा बना सकते हैं जो मनमाने ढंग से कुंजी प्रकार से मनमाना कुंजी प्रकार से मेल खाता है।

आप नक्शे जो YourClass तों या YetAnotherClass को YourOtherClass को float रों, short रों को std::string रों नक्शा बना सकते हैं।

आप std::map<void *, void *> भी बना सकते हैं जो किसी भी अन्य सूचक को किसी भी सूचक को मानचित्रित कर सकता है। यद्यपि यह संदिग्ध उपयोग होगा, क्योंकि पॉइंटर इंगित करने वाले डेटा के प्रकार को जानने का कोई तरीका नहीं होगा।

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