2015-08-28 7 views
6

क्या विशुद्ध रूप से (और जावा या किसी अन्य भाषा में नहीं) डेटा स्ट्रक्चर के संदर्भ में HashTable और HashMapके बीच अंतर है।अंतर

मैंने लोगों को एक ही अवधारणा के लिए इन शर्तों का उपयोग एक दूसरे के रूप में देखा है। क्या डेटा स्ट्रक्चर के संदर्भ में सभी पर इसका कोई फर्क नहीं पड़ता है!

+0

सी में कोई मानक हैशटेबल या हैशैप प्रकार नहीं है। दो शब्द आमतौर पर एक दूसरे के लिए उपयोग किए जाते हैं। –

+2

मुझे इस बात से अवगत है कि सी में ऐसा कोई मानक हैशटेबल या हैश मैप नहीं है। मेरा मतलब था कि सी में इसकी अवधारणा प्रोग्रामिंग करते समय दोनों के बीच कोई अंतर होता है। –

+0

तब सी के साथ इसका कोई लेना-देना नहीं है "हैश मैप" या "हैशटेबल" की कोई धारणा नहीं है। –

उत्तर

-1

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

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

या यह कुछ अलग हो सकता है। दोबारा, सी इस तरह की चीज के लिए किसी भी प्रकार का अंतर्निर्मित कंटेनर नहीं है, इसलिए नामों को सी संदर्भ में वास्तव में कुछ भी मतलब नहीं है।

5

कंप्यूटिंग विज्ञान शब्दावली में, map एक कुंजी से एक मूल्य से एक सहयोगी कंटेनर मैपिंग है। दूसरे शब्दों में, आप "कुंजी के याद रखें मूल्य वी" के लिए संचालन कर सकते हैं और बाद में "कुंजी के लिए मूल्य प्राप्त करें"। एक मानचित्र को कई तरीकों से कार्यान्वित किया जा सकता है - उदाहरण के लिए, एक (वैकल्पिक रूप से संतुलित) बाइनरी पेड़, या हैश टेबल, या यहां तक ​​कि कुंजी/मूल्य को संग्रहीत करने वाले structs की एक संगत सरणी के साथ।

हैश तालिका मनमाने ढंग से डेटा संग्रहीत करने के लिए एक संरचना है, और डेटा में एक अलग कुंजी और मूल्य शामिल नहीं है। उदाहरण के लिए, मेरे पास एक हैश तालिका हो सकती है जिसमें मूल्य {1, 10, 33, 9 7} है, जो उनकी स्वयं की चाबियाँ होंगी। जब कुंजी से कोई मूल्य अलग नहीं होता है, तो इसे कभी-कभी "सेट" के रूप में जाना जाता है, और हैश तालिका कार्यान्वयन के साथ "हैश सेट" होता है।

तो, हैश तालिका तत्वों को संग्रहित करता है, जिनमें से प्रत्येक में विशिष्ट कुंजी और मूल्य घटकों को शामिल करने की आवश्यकता नहीं होती है, लेकिन यदि ऐसा होता है तो यह भी हैश नक्शा है।

+0

तो 'हैशमप' केवल 'हैश टेबल' का एक विशेष प्रकार है (जिसमें एक अलग कुंजी और मान हैं)? –

+1

@ निकज़बर: हाँ, यह सही है - मेरे अंतिम पैराग्राफ का एक उचित पैराफ्रेशिंग। चीयर्स –

+1

अंत में स्पष्ट रूप से यह स्पष्ट करने के लिए पहले व्यक्ति होने के लिए धन्यवाद कि हैश तालिका और हैशपैप +1 के बीच क्या अंतर है –

0

हैशपैप और हैशटेबल के बीच की व्याख्या काफी सही है क्योंकि यह strmap.c में कार्यान्वित एक स्ट्रिंग हैश मैप के शीर्षलेख के लिए भी फिट बैठती है जहां स्ट्रिंगमैप एक कुंजी, मूल्य-संरचना के गुणों को संतुष्ट तारों के लिए हैशटेबल है। यहां यह कहता है:

/* 
* strmap version 2.0.1<br> 
* 
* ANSI C hash table for strings. 
* 
* Version history: 
* 1.0.0 - initial release 
* 2.0.0 - changed function prefix from strmap to sm to ensure 
*  ANSI C compatibility 
* 2.0.1 - improved documentation< 
* 
* strmap.c 
* 
* Copyright (c) 2009, 2011, 2013 Per Ola Kristensson. 
* 
* Per Ola Kristensson <[email protected]> 
* Inference Group, Department of Physics 
* University of Cambridge 
* Cavendish Laboratory 
* JJ Thomson Avenue 
* CB3 0HE Cambridge 
* United Kingdom 
* 
* strmap is free software: you can redistribute it and/or modify 
* it under the terms of the GNU Lesser General Public License as published by 
* the Free Software Foundation, either version 3 of the License, or 
* (at your option) any later version. 
* 
* strmap is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU Lesser General Public License for more details. 
* 
* You should have received a copy of the GNU Lesser General Public License 
* along with strmap. If not, see <http://www.gnu.org/licenses/>. 
*/ 
#include "strmap.h" 
typedef struct Pair Pair; 
typedef struct Bucket Bucket; 
struct Pair { 
    char *key; 
    char *value; 
};