अनऑर्डरेड एसोसिएटिव कंटेनर (सी ++): Difference between revisions
No edit summary |
No edit summary |
||
Line 2: | Line 2: | ||
{{C++ Standard Library}} | {{C++ Standard Library}} | ||
प्रोग्रामिंग भाषा सी++ में, अनऑर्डरेड एसोसिएटिव कंटेनर [[सी ++ मानक पुस्तकालय]] में क्लास टेम्प्लेट का समूह है जो [[ हैश तालिका ]] वेरिएंट को कार्यान्वित करता है। टेम्प्लेट के कारण उनका उपयोग आर्बिट्ररी | प्रोग्रामिंग भाषा सी++ में, अनऑर्डरेड एसोसिएटिव कंटेनर [[सी ++ मानक पुस्तकालय]] में क्लास टेम्प्लेट का समूह है जो [[ हैश तालिका ]] के वेरिएंट को कार्यान्वित करता है। टेम्प्लेट के कारण उनका उपयोग आर्बिट्ररी तत्वों जैसे पूर्णांक अथवा कस्टम क्लासेज को संग्रहीत करने के लिए किया जा सकता है। निम्नलिखित कंटेनरों <code>unordered_set</code>, <code>unordered_map</code>, <code>unordered_multiset</code>, <code>unordered_multimap</code> को [[सी ++]] मानक के वर्तमान संशोधन में परिभाषित किया गया है। इनमें से प्रत्येक कंटेनर उनके एलिमेंट्स के कॉन्सट्रेन्ट्स पर भिन्न होता है। | ||
अनऑर्डरेड [[सहयोगी कंटेनर|एसोसिएटिव कंटेनर]] सी ++ मानक पुस्तकालय में एसोसिएटिव कंटेनर के समतुल्य होते हैं किन्तु उनके कॉन्सट्रेन्ट्स भिन्न-भिन्न होते हैं। अनऑर्डरेड एसोसिएटिव कंटेनरों में एलिमेंट्स उचित रूप से क्रमबद्ध नहीं होते हैं। यह ऑब्जेक्ट्स को | अनऑर्डरेड [[सहयोगी कंटेनर|एसोसिएटिव कंटेनर]] सी ++ मानक पुस्तकालय में एसोसिएटिव कंटेनर के समतुल्य होते हैं किन्तु उनके कॉन्सट्रेन्ट्स भिन्न-भिन्न होते हैं। अनऑर्डरेड एसोसिएटिव कंटेनरों में एलिमेंट्स उचित रूप से क्रमबद्ध नहीं होते हैं। यह ऑब्जेक्ट्स को संग्रहित करने के लिए हैशिंग के उपयोग के कारण होता है। कंटेनरों को रेगुलर एसोसिएटिव कंटेनर की भाँति इटरेट किया जा सकता है। | ||
== इतिहास == | == इतिहास == | ||
सी ++ भाषा में हैश | सी ++ भाषा में हैश तालिका का प्रथम व्यापक रूप से उपयोग किया जाने वाला कार्यान्वयन [[सिलिकॉन ग्राफिक्स]] (एसजीआई) [[मानक टेम्पलेट लाइब्रेरी|मानक टेम्पलेट पुस्तकालय]] (एसटीएल) के <code>hash_map</code>, <code>hash_set</code>, <code>hash_multimap</code>, <code>hash_multiset</code> क्लास टेम्पलेट्स थे।<ref>{{cite web |url= http://www.sgi.com/tech/stl/hash_map.html |title=hash_map<Key, Data, HashFcn, EqualKey, Alloc> |publisher=[[Silicon Graphics]] (SGI) |access-date=26 January 2011}}</ref> उनकी उपयोगिता के कारण, उन्हें सी++ मानक पुस्तकालय के विभिन्न अन्य कार्यान्वयनों (उदाहरण के लिए, [[जीएनयू संकलक संग्रह]] (जीसीसी) [[libstdc++]]<ref>{{cite web |url=https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.1/class____gnu__cxx_1_1hash__map.html |title=libstdc++: hash_map Class Template Reference |access-date=26 January 2011}}</ref> और [[ विजुअल सी ++ ]] (एमएसवीसी) मानक पुस्तकालय) में सम्मिलित किया गया है। <code>hash_*</code> क्लास टेम्प्लेट [[सी ++ तकनीकी रिपोर्ट 1]] (सी++ टीआर1) में प्रस्तावित किए गए थे और <code>unordered_*</code> नामों के अंतर्गत स्वीकार किए गए थे।<ref>{{cite web |title=A Proposal to Add Hash Tables to the Standard Library (revision 4) |author=WG21 |date=9 April 2003 |url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1456.html |id=n1456}}</ref> जिसके पश्चात उन्हें सी++ मानक के [[C++11|सी++11]] संशोधन में सम्मिलित किया गया था।<ref name="n3126">{{citation|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf |title=Working Draft, Standard for Programming Language C++ |author=WG21 |date=21 August 2010 |id=n3126}}</ref> बूस्ट [[सी ++ पुस्तकालयों को बढ़ावा दें|सी++ पुस्तकालय]] में <code><boost/unordered_map.hpp></code> के रूप में भी यह उपलब्ध है। <ref>{{cite web |publisher=Boost |title=Class template unordered_map |url=http://www.boost.org/doc/libs/1_45_0/doc/html/boost/unordered_map.html |access-date=26 January 2011}}</ref> | ||
== फंक्शन्स का अवलोकन == | == फंक्शन्स का अवलोकन == | ||
कंटेनरों को हेडर में डिफाइन किया जाता है, उदाहरण के लिए, <code>unordered_set</code> को हेडर <code><unordered_set></code> में डिफाइन किया गया है। सभी [http://www.sgi.com/tech/stl/Container.html कंटेनर] [[अवधारणा (जेनेरिक प्रोग्रामिंग)|कांसेप्ट]] (जेनेरिक प्रोग्रामिंग) की आवश्यकताओं को पूर्ण करते हैं, जिसका अर्थ है कि उनके निकट <code>begin()</code>, <code>end()</code>, <code>size()</code>, <code>max_size()</code>, <code>empty()</code>, और <code>swap()</code> विधियाँ हैं। | कंटेनरों को हेडर में डिफाइन किया जाता है, उदाहरण के लिए, <code>unordered_set</code> को हेडर <code><unordered_set></code> में डिफाइन किया गया है। सभी [http://www.sgi.com/tech/stl/Container.html कंटेनर] [[अवधारणा (जेनेरिक प्रोग्रामिंग)|कांसेप्ट]] (जेनेरिक प्रोग्रामिंग) की आवश्यकताओं को पूर्ण करते हैं, जिसका अर्थ है कि उनके निकट <code>begin()</code>, <code>end()</code>, <code>size()</code>, <code>max_size()</code>, <code>empty()</code>, और <code>swap()</code> विधियाँ होती हैं। | ||
{| class="wikitable" style="font-size:0.85em" | {| class="wikitable" style="font-size:0.85em" |
Revision as of 09:06, 20 May 2023
C++ Standard Library |
---|
Containers |
C standard library |
प्रोग्रामिंग भाषा सी++ में, अनऑर्डरेड एसोसिएटिव कंटेनर सी ++ मानक पुस्तकालय में क्लास टेम्प्लेट का समूह है जो हैश तालिका के वेरिएंट को कार्यान्वित करता है। टेम्प्लेट के कारण उनका उपयोग आर्बिट्ररी तत्वों जैसे पूर्णांक अथवा कस्टम क्लासेज को संग्रहीत करने के लिए किया जा सकता है। निम्नलिखित कंटेनरों unordered_set
, unordered_map
, unordered_multiset
, unordered_multimap
को सी ++ मानक के वर्तमान संशोधन में परिभाषित किया गया है। इनमें से प्रत्येक कंटेनर उनके एलिमेंट्स के कॉन्सट्रेन्ट्स पर भिन्न होता है।
अनऑर्डरेड एसोसिएटिव कंटेनर सी ++ मानक पुस्तकालय में एसोसिएटिव कंटेनर के समतुल्य होते हैं किन्तु उनके कॉन्सट्रेन्ट्स भिन्न-भिन्न होते हैं। अनऑर्डरेड एसोसिएटिव कंटेनरों में एलिमेंट्स उचित रूप से क्रमबद्ध नहीं होते हैं। यह ऑब्जेक्ट्स को संग्रहित करने के लिए हैशिंग के उपयोग के कारण होता है। कंटेनरों को रेगुलर एसोसिएटिव कंटेनर की भाँति इटरेट किया जा सकता है।
इतिहास
सी ++ भाषा में हैश तालिका का प्रथम व्यापक रूप से उपयोग किया जाने वाला कार्यान्वयन सिलिकॉन ग्राफिक्स (एसजीआई) मानक टेम्पलेट पुस्तकालय (एसटीएल) के hash_map
, hash_set
, hash_multimap
, hash_multiset
क्लास टेम्पलेट्स थे।[1] उनकी उपयोगिता के कारण, उन्हें सी++ मानक पुस्तकालय के विभिन्न अन्य कार्यान्वयनों (उदाहरण के लिए, जीएनयू संकलक संग्रह (जीसीसी) libstdc++[2] और विजुअल सी ++ (एमएसवीसी) मानक पुस्तकालय) में सम्मिलित किया गया है। hash_*
क्लास टेम्प्लेट सी ++ तकनीकी रिपोर्ट 1 (सी++ टीआर1) में प्रस्तावित किए गए थे और unordered_*
नामों के अंतर्गत स्वीकार किए गए थे।[3] जिसके पश्चात उन्हें सी++ मानक के सी++11 संशोधन में सम्मिलित किया गया था।[4] बूस्ट सी++ पुस्तकालय में <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
|
इन-प्लेस एलिमेंट्स का निर्माण करता है (C++11) | |
emplace_hint
|
emplace_hint
|
emplace_hint
|
emplace_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
|
की कम्पेरिज़न फ़ंक्शन रिटर्न करता है। |
उपयोग उदाहरण
#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.