अनऑर्डरेड एसोसिएटिव कंटेनर (सी ++)
| C++ Standard Library |
|---|
| Containers |
| C standard library |
प्रोग्रामिंग भाषा 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) |
Description | |
|---|---|---|---|---|---|
| (constructor) | (constructor) | (constructor) | (constructor) | विभिन्न स्रोतों से कंटेनर का निर्माण करता है। | |
| (destructor) | (destructor) | (destructor) | (destructor) | सेट और निहित एलिमेंट्स को नष्ट कर देता है। | |
operator=
|
operator=
|
operator=
|
operator=
|
कंटेनर को वैल्यू असाइन करता है। | |
get_allocator
|
get_allocator
|
get_allocator
|
get_allocator
|
एलिमेंट्स को मेमोरी एलोकेट करने के लिए प्रयुक्त एलोकेटर रिटर्न करता है। | |
| Element access | — | at
|
— | — | बाउंड चेकिंग के साथ निर्दिष्ट एलिमेंट्स को एक्सेस करता है। |
| — | operator[]
|
— | — | बाउंड चेकिंग के अतिरिक्त निर्दिष्ट एलिमेंट्स को एक्सेस करता है। | |
| Iterators | begin
|
begin
|
begin
|
begin
|
कंटेनर के प्रारम्भ में इटरेटर रिटर्न करता है। |
end
|
end
|
end
|
end
|
कंटेनर के अंत में इटरेटर रिटर्न करता है। | |
| Capacity | empty
|
empty
|
empty
|
empty
|
चेक करता है कि क्या कंटेनर रिक्त है |
size
|
size
|
size
|
size
|
कंटेनर में एलिमेंट्स की संख्या रिटर्न करता है। | |
max_size
|
max_size
|
max_size
|
max_size
|
कंटेनर में एलिमेंट्स की अधिकतम संभव संख्या रिटर्न करता है। | |
| Modifiers | 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
|
कंटेंट्स को दूसरे कंटेनर से स्वैप करता है। | |
| Lookup | count
|
count
|
count
|
count
|
विशिष्ट कुंजी से युग्मित होने वाले एलिमेंट्स की संख्या रिटर्न करता है। |
find
|
find
|
find
|
find
|
विशिष्ट कुंजी के साथ एलिमेंट को फाइंड करता है। | |
equal_range
|
equal_range
|
equal_range
|
equal_range
|
Returns a range of elements matching specific key. | |
| Bucket interface | ... | ||||
| Hash policy | ... | ||||
| Observers | hash_function
|
hash_function
|
hash_function
|
hash_function
|
Returns the function used to create hash of a key |
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;
संदर्भ
- ↑ "hash_map<Key, Data, HashFcn, EqualKey, Alloc>". Silicon Graphics (SGI). Retrieved 26 January 2011.
- ↑ "libstdc++: hash_map Class Template Reference". Retrieved 26 January 2011.
- ↑ WG21 (9 April 2003). "A Proposal to Add Hash Tables to the Standard Library (revision 4)". n1456.
- ↑ WG21 (21 August 2010), Working Draft, Standard for Programming Language C++ (PDF), n3126
- ↑ "Class template unordered_map". Boost. Retrieved 26 January 2011.