अनऑर्डरेड एसोसिएटिव कंटेनर (सी ++): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 22: Line 22:
! <code>unordered_multiset</code><br>(C++11)
! <code>unordered_multiset</code><br>(C++11)
! <code>unordered_multimap</code><br>(C++11)
! <code>unordered_multimap</code><br>(C++11)
! Description
! विवरण
|-
|-
! rowspan=4 |
! rowspan=4 |
Line 49: Line 49:
| एलिमेंट्स को मेमोरी एलोकेट करने के लिए प्रयुक्त एलोकेटर रिटर्न करता है।
| एलिमेंट्स को मेमोरी एलोकेट करने के लिए प्रयुक्त एलोकेटर रिटर्न करता है।
|-
|-
! rowspan=2 | Element access
! rowspan=2 | एलिमेंट एक्सेस
| {{n/a}}
| {{n/a}}
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/at at]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/at at]</code>
Line 62: Line 62:
| बाउंड चेकिंग के अतिरिक्त निर्दिष्ट एलिमेंट्स को एक्सेस करता है।
| बाउंड चेकिंग के अतिरिक्त निर्दिष्ट एलिमेंट्स को एक्सेस करता है।
|-
|-
! rowspan=2 | Iterators
! rowspan=2 | इटरेटर
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/begin begin]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/begin begin]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/begin begin]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/begin begin]</code>
Line 75: Line 75:
| कंटेनर के अंत में इटरेटर रिटर्न करता है।
| कंटेनर के अंत में इटरेटर रिटर्न करता है।
|-
|-
! rowspan=3 | Capacity
! rowspan=3 | क्षमता
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/empty empty]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/empty empty]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/empty empty]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/empty empty]</code>
Line 94: Line 94:
| कंटेनर में एलिमेंट्स की अधिकतम संभव संख्या रिटर्न करता है।
| कंटेनर में एलिमेंट्स की अधिकतम संभव संख्या रिटर्न करता है।
|-
|-
! rowspan=6 | Modifiers
! rowspan=6 | संशोधक
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/clear clear]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/clear clear]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/clear clear]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/clear clear]</code>
Line 131: Line 131:
| कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
| कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
|-
|-
! rowspan=3 | Lookup
! rowspan=3 | लुकउप
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/count count]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/count count]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/count count]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/count count]</code>
Line 148: Line 148:
| <code>[http://en.cppreference.com/w/cpp/container/unordered_multiset/equal_range equal_range]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_multiset/equal_range equal_range]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_multimap/equal_range equal_range]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_multimap/equal_range equal_range]</code>
| Returns a range of elements matching specific key.
| विशिष्ट कुंजी से युग्मित होने वाले एलिमेंट्स की श्रेणी रिटर्न करता है।
|-
|-
! rowspan=1 | Bucket interface
! rowspan=1 | बकेट इंटरफ़ेस
| colspan=5 | ...
| colspan=5 | ...
|-
|-
! rowspan=1 | Hash policy
! rowspan=1 | हैश नीति
| colspan=5 | ...
| colspan=5 | ...
|-
|-
! rowspan=2 | Observers
! rowspan=2 | प्रेक्षक
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/hash_function hash_function]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/hash_function hash_function]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/hash_function hash_function]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_map/hash_function hash_function]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_multiset/hash_function hash_function]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_multiset/hash_function hash_function]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_multimap/hash_function hash_function]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_multimap/hash_function hash_function]</code>
| Returns the function used to create hash of a key
| कुंजी का हैश बनाने के लिए उपयोग किया गया फ़ंक्शन रिटर्न करता है।
|-
|-
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/key_eq key_eq]</code>
| <code>[http://en.cppreference.com/w/cpp/container/unordered_set/key_eq key_eq]</code>

Revision as of 15:55, 18 May 2023

प्रोग्रामिंग भाषा C++ में, अनऑर्डरेड एसोसिएटिव कंटेनर C ++ मानक पुस्तकालय में क्लास टेम्प्लेट का समूह है जो हैश तालिका वेरिएंट को कार्यान्वित करता है। टेम्प्लेट के कारण उनका उपयोग आर्बिट्ररी एलिमेंट्स जैसे पूर्णांक अथवा कस्टम क्लासेज को संग्रहीत करने के लिए किया जा सकता है। निम्नलिखित कंटेनरों unordered_set, unordered_map, unordered_multiset, unordered_multimap को C ++ मानक के वर्तमान संशोधन में परिभाषित किया गया है। इनमें से प्रत्येक कंटेनर मात्र उनके एलिमेंट्स के कॉन्सट्रेन्ट्स पर भिन्न होता है।

अनऑर्डरेड एसोसिएटिव कंटेनर सी ++ मानक पुस्तकालय में एसोसिएटिव कंटेनर के समतुल्य होते हैं किन्तु उनके कॉन्सट्रेन्ट्स भिन्न-भिन्न होते हैं। अनऑर्डरेड एसोसिएटिव कंटेनरों में एलिमेंट्स उचित रूप से क्रमबद्ध नहीं होते हैं। यह ऑब्जेक्ट्स को स्टोर करने के लिए हैशिंग के उपयोग के कारण होता है। कंटेनरों को अभी भी रेगुलर एसोसिएटिव कंटेनर की भाँति इटरेट किया जा सकता है।

इतिहास

सी ++ भाषा में हैश टेबल का प्रथम व्यापक रूप से उपयोग किया जाने वाला कार्यान्वयन सिलिकॉन ग्राफिक्स (एसजीआई) स्टैण्डर्ड टेम्पलेट लाइब्रेरी (एसटीएल) के hash_map, hash_set, hash_multimap, hash_multiset क्लास टेम्पलेट्स थे।[1] उनकी उपयोगिता के कारण, उन्हें C++ मानक लाइब्रेरी के विभिन्न अन्य कार्यान्वयनों (उदाहरण के लिए, जीएनयू संकलक संग्रह (जीसीसी) libstdc++[2] और विजुअल सी ++ (एमएसवीसी) मानक लाइब्रेरी) में सम्मिलित किया गया है। hash_* क्लास टेम्प्लेट C ++ तकनीकी रिपोर्ट 1 (C++ TR1) में प्रस्तावित किए गए थे और unordered_* नामों के अंतर्गत स्वीकार किए गए थे।[3] जिसके पश्चात उन्हें C++ मानक के C++11 संशोधन में सम्मिलित किया गया था।[4] बूस्ट C++ लाइब्रेरी में <boost/unordered_map.hpp> के रूप में भी उपलब्ध है। [5]


फंक्शन्स का अवलोकन

कंटेनरों को हेडर में डिफाइन किया जाता है, उदाहरण के लिए, unordered_set को हेडर <unordered_set> में डिफाइन किया गया है। सभी कंटेनर कांसेप्ट (जेनेरिक प्रोग्रामिंग) की आवश्यकताओं को पूर्ण करते हैं, जिसका अर्थ है कि उनके निकट begin(), end(), size(), max_size(), empty(), और swap() विधियाँ हैं।

unordered_set
(C++11)
unordered_map
(C++11)
unordered_multiset
(C++11)
unordered_multimap
(C++11)
विवरण
(constructor) (constructor) (constructor) (constructor) विभिन्न स्रोतों से कंटेनर का निर्माण करता है।
(destructor) (destructor) (destructor) (destructor) सेट और निहित एलिमेंट्स को नष्ट कर देता है।
operator= operator= operator= operator= कंटेनर को वैल्यू असाइन करता है।
get_allocator get_allocator get_allocator get_allocator एलिमेंट्स को मेमोरी एलोकेट करने के लिए प्रयुक्त एलोकेटर रिटर्न करता है।
एलिमेंट एक्सेस at बाउंड चेकिंग के साथ निर्दिष्ट एलिमेंट्स को एक्सेस करता है।
operator[] बाउंड चेकिंग के अतिरिक्त निर्दिष्ट एलिमेंट्स को एक्सेस करता है।
इटरेटर begin begin begin begin कंटेनर के प्रारम्भ में इटरेटर रिटर्न करता है।
end end end end कंटेनर के अंत में इटरेटर रिटर्न करता है।
क्षमता empty empty empty empty चेक करता है कि क्या कंटेनर रिक्त है
size size size size कंटेनर में एलिमेंट्स की संख्या रिटर्न करता है।
max_size max_size max_size max_size कंटेनर में एलिमेंट्स की अधिकतम संभव संख्या रिटर्न करता है।
संशोधक clear clear clear clear कंटेंट्स को क्लियर करता है।
insert insert insert insert एलिमेंट्स को इन्सर्ट करता है।
emplace emplace emplace emplace Constructs elements in-place (C++11)
emplace_hint emplace_hint emplace_hint emplace_hint Constructs elements in-place using a hint (C++11)
erase erase erase erase एलिमेंट्स को इरेज करता है।
swap swap swap swap कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
लुकउप count count count count विशिष्ट कुंजी से युग्मित होने वाले एलिमेंट्स की संख्या रिटर्न करता है।
find find find find विशिष्ट कुंजी के साथ एलिमेंट को फाइंड करता है।
equal_range equal_range equal_range equal_range विशिष्ट कुंजी से युग्मित होने वाले एलिमेंट्स की श्रेणी रिटर्न करता है।
बकेट इंटरफ़ेस ...
हैश नीति ...
प्रेक्षक hash_function hash_function hash_function hash_function कुंजी का हैश बनाने के लिए उपयोग किया गया फ़ंक्शन रिटर्न करता है।
key_eq key_eq key_eq key_eq Returns key comparison function.


उपयोग उदाहरण

#include <iostream>
#include <string>
#include <unordered_map>
 
int main()
{
    std::unordered_map<std::string, int> months;
    months["january"] = 31;
    months["february"] = 28;
    months["march"] = 31;
    months["april"] = 30;
    months["may"] = 31;
    months["june"] = 30;
    months["july"] = 31;
    months["august"] = 31;
    months["september"] = 30;
    months["october"] = 31;
    months["november"] = 30;
    months["december"] = 31;
    std::cout << "september -> " << months["september"] << std::endl;
    std::cout << "april     -> " << months["april"] << std::endl;
    std::cout << "december  -> " << months["december"] << std::endl;
    std::cout << "february  -> " << months["february"] << std::endl;
    return 0;
}


कस्टम हैश फ़ंक्शंस

Std :: unordered_map में कस्टम ऑब्जेक्ट्स का उपयोग करने के लिए, कस्टम हैश फ़ंक्शन को परिभाषित किया जाना चाहिए। यह फ़ंक्शन कस्टम प्रकार का कॉन्स्ट रिफरेन्स लेता है और size_t रिटर्न करता है।

#include <unordered_map>
 
struct X{int i,j,k;};

struct hash_X{
  size_t operator()(const X &x) const{
    return std::hash<int>()(x.i) ^ std::hash<int>()(x.j) ^ std::hash<int>()(x.k);
  }
};

यूजर फंक्शन डिफाइन करता है जिसका उपयोग std :: unordered_map में टेम्पलेट पैरामीटर के रूप में पास करके किया जा सकता है

 std::unordered_map<X,int,hash_X> my_map;

या std::hash फ़ंक्शन को डिफ़ॉल्ट हैश फ़ंक्शन के रूप में सेट किया जा सकता है

namespace std {
    template <>
        class hash<X>{
        public :
        size_t operator()(const X &x ) const{
            return hash<int>()(x.i) ^ hash<int>()(x.j) ^ hash<int>()(x.k);
        }
    };
}

//...
 std::unordered_map<X,int> my_map;


संदर्भ

  1. "hash_map<Key, Data, HashFcn, EqualKey, Alloc>". Silicon Graphics (SGI). Retrieved 26 January 2011.
  2. "libstdc++: hash_map Class Template Reference". Retrieved 26 January 2011.
  3. WG21 (9 April 2003). "A Proposal to Add Hash Tables to the Standard Library (revision 4)". n1456.
  4. WG21 (21 August 2010), Working Draft, Standard for Programming Language C++ (PDF), n3126
  5. "Class template unordered_map". Boost. Retrieved 26 January 2011.