मानचित्र और शब्दकोश में क्या अंतर है?


198

मुझे पता है कि एक मानचित्र एक डेटा संरचना है जो मूल्यों की कुंजी को मैप करती है। शब्दकोश एक ही नहीं है? मानचित्र और शब्दकोश 1 के बीच क्या अंतर है ?


1. मैं यह नहीं पूछ रहा हूं कि उन्हें भाषा एक्स या वाई में कैसे परिभाषित किया जाता है (जो लगता है कि आम तौर पर लोग एसओ पर यहां पूछ रहे हैं), मैं जानना चाहता हूं कि उनके सिद्धांत में क्या अंतर है।


बड़ा अच्छा सवाल!
NoName

जवाबों:


262

एक ही चीज़ के लिए दो शब्द:

  • "मैप" का उपयोग जावा, सी ++ द्वारा किया जाता है
  • "शब्दकोश" .Net, पायथन द्वारा उपयोग किया जाता है
  • "साहचर्य सरणी" का उपयोग PHP द्वारा किया जाता है

"मैप" सही गणितीय शब्द है, लेकिन इसे टाला जाता है क्योंकि कार्यात्मक प्रोग्रामिंग में इसका एक अलग अर्थ है ।

कुछ भाषाएं अभी भी अन्य शब्दों का उपयोग करती हैं (जावास्क्रिप्ट में "ऑब्जेक्ट", रूबी में "हैश", लुआ में "टेबल") , लेकिन उन सभी के प्रोग्रामिंग में अलग-अलग अर्थ भी हैं, इसलिए मैं उनसे बचूंगा।

अधिक जानकारी के लिए यहाँ देखें ।


7
क्या JAVA में मैप और शब्दकोश दोनों नहीं हैं? वहाँ अंतर क्या है?
vivek_jonam

35
@vivek_jonam: DictionaryJava अप्रचलित है। यह एक अमूर्त वर्ग है, जिसका उपयोग Mapइंटरफ़ेस बनाने से पहले किया गया था।
ब्लूराजा - डैनी पीफ्लुगुएफ्ट

7
मुझे पता है कि सवाल भाषा अज्ञेय है, इसलिए यह सही उत्तर है, लेकिन मैंने जावा को दोनों के कारण की तलाश में यहाँ समाप्त किया, इसलिए यह टिप्पणी वास्तव में मेरे लिए एकदम सही थी।
ग्रैंडऑपनर

1
"टेबल" का उपयोग लुआ में किया जाता है।
Deduplicator

1
यह JSON में ऐतिहासिक रूप से (जावास्क्रिप्ट से संबंधित ऐतिहासिक कारणों के लिए) "ऑब्जेक्ट" भी कुछ हद तक कहा जाता है
अप्रैल

20

एक दूसरे के लिए एक पुराना शब्द है। आमतौर पर "डिक्शनरी" शब्द का इस्तेमाल गणितीय शब्द "मैप" से पहले किया जाता था। इसके अलावा, शब्दकोशों में एक महत्वपूर्ण प्रकार की स्ट्रिंग होती है, लेकिन यह हर जगह 100% सच नहीं है।


9

मेरे 2 सेंट।

शब्दकोश जावा में एक सार वर्ग है जबकि मानचित्र एक इंटरफ़ेस है। चूंकि, जावा कई विरासतों का समर्थन नहीं करता है, अगर कोई वर्ग शब्दकोश का विस्तार करता है, तो यह किसी अन्य वर्ग का विस्तार नहीं कर सकता है।

इसलिए, मैप इंटरफ़ेस पेश किया गया था।

शब्दकोश वर्ग अप्रचलित है और मानचित्र का उपयोग पसंद किया जाता है।


9

इस प्रश्न का उत्तर देना प्रोग्रामर द्वारा जटिल है, विशेष रूप से इस्तेमाल की जाने वाली भाषाओं या प्रणालियों में अधिक विशिष्ट अर्थ दिए गए शब्दों को देखने के बाद, लेकिन यह सवाल एक भाषा अज्ञेय तुलना "सिद्धांत रूप में" के लिए पूछता है, जिसे मैं कम्प्यूटिंग विज्ञान के संदर्भ में बताने जा रहा हूं। ।

शब्दावली समझाया

ऑक्सफोर्ड यूनिवर्सिटी डिक्शनरी ऑफ़ कंप्यूटर साइंस लिस्ट:

किसी भी डेटा संरचना को तत्वों के एक सेट का प्रतिनिधित्व करने वाले शब्दकोश में शामिल करें जो तत्वों के सम्मिलन और विलोपन के साथ-साथ सदस्यता के लिए परीक्षण कर सकता है

  • उदाहरण के लिए, हमारे पास {A, B, C, D ...} तत्वों का एक सेट है जिसे हम सम्मिलित कर सकते हैं और हटाना शुरू कर सकते हैं, और हम "C मौजूद है?"

मानचित्र की कम्प्यूटिंग विज्ञान धारणा हालांकि गणितीय भाषाई शब्द मानचित्रण पर आधारित है , जिसे ऑक्सफोर्ड डिक्शनरी इस प्रकार परिभाषित करती है:

मैपिंग एक ऑपरेशन जो किसी दिए गए सेट (डोमेन) के प्रत्येक तत्व को दूसरे सेट (रेंज) के एक या अधिक तत्वों से जोड़ता है।

  • जैसे, एक मानचित्र डेटा संरचना किसी दिए गए सेट के तत्वों से जाने का एक तरीका प्रदान करती है - ज्ञात हैं कि नक्शे में " कुंजियाँ " हैं, दूसरे सेट में एक या अधिक तत्वों के लिए - जिसे संबंधित " मूल्य (ओं) " के रूप में जाना जाता है ।
  • "दूसरे सेट में ... या अधिक तत्वों" पहलू एक कार्यान्वयन के द्वारा समर्थित किया जा सकता है दो अलग-अलग तरीका है:
    • कई मानचित्र कार्यान्वयन कुंजियों की विशिष्टता को लागू करते हैं और केवल प्रत्येक कुंजी को एक मान के साथ जुड़े रहने की अनुमति देते हैं, लेकिन यह मान एक डेटा संरचना में सक्षम हो सकता है जिसमें एक सरल डेटा प्रकार के कई मान होते हैं, जैसे {{1, {"एक" , "ichi"}, {2, {"दो", "नी"}}} तार के जोड़े से मिलकर मूल्यों को दर्शाता है।
    • अन्य मानचित्र कार्यान्वयन डुप्लिकेट कुंजियों को प्रत्येक मैपिंग को समान या अलग-अलग मानों की अनुमति देते हैं - जो कार्यात्मक रूप से "सहयोगियों ... प्रत्येक [कुंजी] तत्व ... के साथ ... अधिक [एक] [मूल्य] तत्वों" मामले को संतुष्ट करता है। उदाहरण के लिए, {{1, "एक"}, {1, "इचि"}, {2, "दो"}, {2, "नी"}}।

शब्दकोश और मानचित्र विपरीत

इसलिए, ऊपर दिए गए Comp Comp Sciology शब्द का उपयोग करते हुए, एक शब्दकोश केवल एक नक्शा है यदि इंटरफ़ेस हर ऑपरेशन के लिए आवश्यक अतिरिक्त संचालन का समर्थन करने के लिए होता है:

  • अलग-अलग कुंजी और मूल्य घटकों के साथ तत्वों को संग्रहीत करने की क्षमता

  • केवल कुंजी दिए गए मान (मानों) को पुनः प्राप्त करने की क्षमता

एक तुच्छ मोड़:

  • एक नक्शा इंटरफ़ेस सीधे एक परीक्षण का समर्थन नहीं कर सकता है कि क्या एक {कुंजी, मान} जोड़ी कंटेनर में है, जो कि एक शब्दकोश की आवश्यकता है जहां तत्वों की आवश्यकता होती है {कुंजी, मूल्य} जोड़े; मानचित्र में कुंजी के परीक्षण के लिए फ़ंक्शन भी नहीं हो सकता है, लेकिन सबसे खराब रूप से आप यह देख सकते हैं कि यदि कोई प्रयास किया गया मूल्य-पुनर्प्राप्ति-बाय-कुंजी सफल होता है या विफल रहता है, तो यदि आप परवाह करते हैं कि कुंजी एक अपेक्षित मान प्राप्त कर सकती है या नहीं।

अपने दर्शकों के लिए स्पष्ट रूप से संवाद करें

The उपरोक्त सभी के बावजूद, यदि आप ऊपर बताए गए सख्त कम्प्यूटिंग विज्ञान के शब्दकोष का उपयोग करते हैं, तो अपने दर्शकों से अपेक्षा न करें कि वे शुरू में आपका अनुसरण करेंगे, या जब आप साझा करते हैं और शब्दावली का बचाव करते हैं तो प्रभावित होंगे। इस सवाल के अन्य उत्तर (और उनके उत्थान) बताते हैं कि यह कितनी संभावना है कि "शब्दकोश" अधिकांश प्रोग्रामर के अनुभव में "मानचित्र" का पर्याय बन जाएगा । ऐसी शब्दावली चुनने की कोशिश करें जो अधिक व्यापक और स्पष्ट रूप से समझ में आए: उदाहरण के लिए

  • साहचर्य कंटेनर : कोई भी कंटेनर कुंजी / मान जोड़े को कुंजी द्वारा मूल्य-पुनः प्राप्ति और मिटाने के साथ संग्रहीत करता है
  • हैश मैप : एक सहयोगी कंटेनर का हैश टेबल कार्यान्वयन
  • हैश सेट अद्वितीय कुंजी लागू करता है : एक शब्दकोश भंडारण तत्वों / मूल्यों का हैश तालिका कार्यान्वयन उन्हें अलग-अलग कुंजी / मूल्य घटकों के रूप में व्यवहार किए बिना, जिसमें तत्वों के डुप्लिकेट सम्मिलित नहीं किए जा सकते हैं।
  • डुप्लिकेट कुंजी का समर्थन करने वाला बाइनरी ट्री मैप : ...

विशिष्ट कार्यान्वयन के साथ क्रॉस साइंस शब्दावली

सी ++ मानक पुस्तकालय

  • नक्शे: map, multimap, unordered_map,unordered_multimap
  • अन्य शब्दकोशों: set, multiset, unordered_set,unordered_multiset
  • ध्यान दें: iterators के साथ या std::findआप में सदस्यता के लिए एक तत्व और परीक्षण को मिटा सकते हैं array, vector, list, dequeआदि, लेकिन कंटेनर इंटरफेस सीधे उस का समर्थन नहीं करते क्योंकि एक तत्व खोजने हे (एन) में शानदार अक्षम है, कुछ मामलों सम्मिलित / मिटा है में अक्षम है, और उन ऑपरेशनों का समर्थन जानबूझकर सीमित एपीआई कंटेनर से करता है - उदाहरण के dequeलिए, आगे और पीछे केवल मिटा / पॉप का समर्थन करना चाहिए और कुछ कुंजी के संदर्भ में नहीं। खोज को ऑर्केस्ट्रेट करने के लिए कोड में अधिक काम करने से प्रोग्रामर को अधिक कुशल खोज के साथ कंटेनर डेटा संरचना पर स्विच करने के लिए धीरे से प्रोत्साहित किया जाता है।

... अन्य भाषाओं को बाद में जोड़ सकते हैं / बेझिझक संपादित कर सकते हैं ...


3

आमतौर पर मैं मानता हूं कि एक नक्शा हैश टेबल द्वारा समर्थित है; यह एक अनियंत्रित स्टोर को दर्शाता है। शब्दकोश एक ऑर्डर किए गए स्टोर को जोड़ती है।

ट्री-बेस्ड डिक्शनरी है जिसे ट्राई कहा जाता है ।

लिस्प में, यह इस तरह दिख सकता है:

(a (n (d t)) n d )

जो शब्दों को कूटबद्ध करता है:

  • तथा
  • चींटी
  • एक
  • विज्ञापन

ऊपर से पत्ती तक का निशान एक शब्द पैदा करता है।


4
Dictionary.Net में अनियंत्रित है।
ब्लूराजा - डैनी पफ्लुघोटे

2
कोको शब्दकोश भी unordered हैं।
केन

C ++ std::mapका आदेश दिया गया है कि यह कार्यान्वयन मानक में निर्दिष्ट नहीं है, std::unordered_mapc ++ 11 में पेश किया गया था, यह एक हैश के माध्यम से कार्यान्वित किया जाता है
Harald Scheirich

3
@HaraldScheirich - जबकि C ++ मानक विशेष रूप से यह नहीं कहता कि "आप एक लाल-काले पेड़ को लागू std::mapकरने के लिए उपयोग करेंगे", और कुछ भी उपयोग करने का प्रयास करें। एक एवीएल पेड़ काम नहीं करेगा; यह प्रविष्टि लागत मानक को पूरा नहीं करता है। एक हैश काम नहीं करेगा; एक हैश unordered है और इसलिए मानक को पूरा नहीं करता है। std::mapबहुत स्पष्ट रूप से यह कहे बिना " लागू करने के लिए लाल-काले पेड़ का उपयोग किया जाएगा "
डेविड हैमेन

+1। हालाँकि कई प्लेटफ़ॉर्म में शब्दकोष अनियंत्रित हैं, शब्द एक आदेश को दर्शाता है। मुझे टर्म मैप ज्यादा पसंद है।
नवफल

2

वास्तव में एक ही बात नहीं है। नक्शे शब्दकोश का एक सबसेट हैं। डिक्शनरी को डालने, हटाने और कार्यों को खोजने के रूप में यहां परिभाषित किया गया है । के रूप में जावा के द्वारा प्रयोग किया मानचित्र (के अनुसार इस ) की आवश्यकता है कि मूल्यों की मैपिंग कुंजी सख्ती से एक एक-से-एक समारोह के रूप में उल्लेख किया जाता है के साथ एक शब्दकोश है। एक शब्दकोश में एक से अधिक मूल्य के लिए एक से अधिक मानचित्र हो सकते हैं, या कई मूल्यों के लिए एक महत्वपूर्ण मानचित्र (जैसे जल्दबाजी में पीछा करना), जैसे ट्विटर हैशटैग खोज।

अधिक "वास्तविक दुनिया" उदाहरण के रूप में, किसी शब्द को शब्दकोष में देखना हमें एक ही शब्द के लिए कई परिभाषाएँ दे सकता है, और जब हम एक प्रविष्टि पाते हैं जो हमें दूसरी प्रविष्टि की ओर इशारा करती है (अन्य शब्द देखें) परिभाषाओं की समान सूची के लिए। वास्तविक दुनिया में, नक्शे बहुत व्यापक हैं, जिससे हमें निर्देशांक के लिए नामों या नामों के लिए स्थान मिल सकते हैं, लेकिन साथ ही हम एक निकटतम पड़ोसी या अन्य विशेषताओं (आबादी, आदि) का पता लगा सकते हैं, इसलिए आईएमएचओ में अधिक विस्तार के लिए तर्क हो सकता है मानचित्र प्रकार संभवतः संभवतः ग्राफ़ आधारित कार्यान्वयन है, लेकिन यह हमेशा सबसे महत्वपूर्ण होगा कि केवल मुख्य-मूल्य जोड़ी को मान लें, विशेष रूप से निकटतम पड़ोसी और मूल्य के अन्य विशेषताओं के कारण सभी मूल्य के डेटा सदस्य हो सकते हैं।

जावा मैप्स, एक-से-एक आवश्यकता के बावजूद, एक सामान्यीकृत शब्दकोश की तरह कुछ और लागू कर सकते हैं यदि मूल्य को एक संग्रह के रूप में सामान्यीकृत किया जाता है, या यदि मान केवल संग्रहित अन्य जगहों के संदर्भ हैं।

याद रखें कि जावा अनुरक्षक ADT परिभाषाओं के अनुरक्षक नहीं हैं, और जावा निर्णय विशेष रूप से जावा के लिए हैं।


1

इस अवधारणा के अन्य शब्द जो काफी सामान्य हैं: साहचर्य सरणी और हैश।


1
हैश का इससे कोई लेना-देना नहीं है। यह जल्दी से पता लगाने की एक विधि है कि क्या वस्तुएं अलग हैं। आप एक हैशमैप के बारे में सोच रहे हैं, जो मैप / डिक्शनरी का काम करने के लिए हैश का उपयोग करता है।
डीजेकवरवर्थ

5
@DJClayworth नहीं, कई प्रोग्रामिंग भाषा वास्तव में इन चीजों को हैश कहते हैं। रूबी देखें । मैंने इसे डिज़ाइन नहीं किया, और मैं इसे कॉल नहीं करूंगा, लेकिन संदेशवाहक को गोली मत मारो।
हांक गे

1

हां, वे समान हैं, आप मिश्रण में "एसोसिएटिव एरे" जोड़ सकते हैं।

Hashtable एक Hashटेटर का उपयोग करना या कार्यान्वयन को संदर्भित करता है।


1

विशुद्ध रूप से सैद्धांतिक स्तर पर।

एक शब्दकोश एक मूल्य है जिसका उपयोग लिंक्ड वैल्यू का पता लगाने के लिए किया जा सकता है। एक मानचित्र एक मूल्य है जो अन्य मूल्यों का पता लगाने के लिए निर्देश प्रदान करता है

सभी संग्रह जो गैर रेखीय पहुंच की अनुमति देते हैं (अर्थात केवल पहले प्राप्त करें या अंतिम प्राप्त करें) एक मानचित्र है, क्योंकि यहां तक ​​कि एक साधारण ऐरे में एक सूचकांक है जो सही मूल्य पर मैप करता है। इसलिए जब एक शब्दकोश एक प्रकार का मानचित्र होता है, तो नक्शे संभव कार्य की एक व्यापक श्रेणी होते हैं।

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


-2

ये एक ही अवधारणा के लिए दो अलग-अलग शब्द हैं।
Hashtableऔर HashMapएक ही अवधारणा को भी देखें।


3
वास्तव में, हैशटेबल / हैशमैप उनके नाम में एक विशिष्ट कार्यान्वयन है (उदाहरण के लिए, C ++ std :: map में प्रयोग किया जाता है, जो एक संतुलित पेड़ कहते हैं)।
जो

सामान्य तौर पर, आपको कार्यान्वयन के बारे में परवाह नहीं करनी चाहिए। (प्रदर्शन कारणों को छोड़कर) इसके अलावा, यह हमेशा सच नहीं है; उदाहरण के लिए .Net को देखें।
SLaks

-2

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

आमतौर पर, हम अलग-अलग चेनिंग का उपयोग करके टकरावों को संभालते हैं । या रैखिक जांच

एक शब्दकोश कई प्रविष्टियों को एक ही कुंजी से जोड़ने की अनुमति देता है।

जब किसी मैप ने सेपरेटिंग चेनिंग को लागू किया है, तो यह एक शब्दकोश जैसा दिखता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.