अनऑर्डरेड एसोसिएटिव कंटेनर (सी ++): Difference between revisions
No edit summary |
No edit summary |
||
Line 8: | Line 8: | ||
== इतिहास == | == इतिहास == | ||
सी ++ भाषा में हैश टेबल का | सी ++ भाषा में हैश टेबल का प्रथम व्यापक रूप से उपयोग किया जाने वाला कार्यान्वयन [[सिलिकॉन ग्राफिक्स]] (एसजीआई) [[मानक टेम्पलेट लाइब्रेरी|स्टैण्डर्ड टेम्पलेट लाइब्रेरी]] (एसटीएल) के <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> उनकी उपयोगिता के कारण, उन्हें C++ मानक लाइब्रेरी के विभिन्न अन्य कार्यान्वयनों (उदाहरण के लिए, [[जीएनयू संकलक संग्रह]] (जीसीसी) [[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]] (C++ TR1) में प्रस्तावित किए गए थे और <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++ मानक के [[C++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> तरीके। |
Revision as of 14:23, 18 May 2023
C++ Standard Library |
---|
Containers |
C standard library |
प्रोग्रामिंग भाषा C++ में, अनऑर्डरेड एसोसिएटिव कंटेनर सी ++ मानक पुस्तकालय में क्लास टेम्प्लेट का समूह है जो हैश तालिका वेरिएंट को कार्यान्वित करता है। टेम्प्लेट के कारण उनका उपयोग आर्बिट्ररी एलिमेंट्स जैसे पूर्णांक अथवा कस्टम क्लासेज को संग्रहीत करने के लिए किया जा सकता है। निम्नलिखित कंटेनरों unordered_set
, unordered_map
, unordered_multiset
, unordered_multimap
को सी ++ मानक के वर्तमान संशोधन में परिभाषित किया गया है। इनमें से प्रत्येक कंटेनर मात्र उनके एलिमेंट्स के कॉन्सट्रेन्ट्स पर भिन्न होता है।
अनऑर्डरेड एसोसिएटिव कंटेनर सी ++ मानक पुस्तकालय में एसोसिएटिव कंटेनर के समतुल्य होते हैं किन्तु उनके कॉन्सट्रेन्ट्स भिन्न-भिन्न होते हैं। अनऑर्डरेड एसोसिएटिव कंटेनरों में एलिमेंट्स उचित रूप से क्रमबद्ध नहीं होते हैं। यह ऑब्जेक्ट्स को स्टोर करने के लिए हैशिंग के उपयोग के कारण होता है। कंटेनरों को अभी भी रेगुलर एसोसिएटिव कंटेनर की भाँति इटरेट किया जा सकता है।
इतिहास
सी ++ भाषा में हैश टेबल का प्रथम व्यापक रूप से उपयोग किया जाने वाला कार्यान्वयन सिलिकॉन ग्राफिक्स (एसजीआई) स्टैण्डर्ड टेम्पलेट लाइब्रेरी (एसटीएल) के hash_map
, hash_set
, hash_multimap
, hash_multiset
क्लास टेम्पलेट्स थे।[1] उनकी उपयोगिता के कारण, उन्हें C++ मानक लाइब्रेरी के विभिन्न अन्य कार्यान्वयनों (उदाहरण के लिए, जीएनयू संकलक संग्रह (जीसीसी) libstdc++[2] और विजुअल सी ++ (एमएसवीसी) मानक लाइब्रेरी) में सम्मिलित किया गया है। hash_*
क्लास टेम्प्लेट सी ++ तकनीकी रिपोर्ट 1 (C++ TR1) में प्रस्तावित किए गए थे और unordered_*
नामों के अंतर्गत स्वीकार किए गए थे।[3] जिसके पश्चात उन्हें C++ मानक के C++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) |
Description | |
---|---|---|---|---|---|
(constructor) | (constructor) | (constructor) | (constructor) | Constructs the container from variety of sources | |
(destructor) | (destructor) | (destructor) | (destructor) | Destructs the set and the contained elements | |
operator=
|
operator=
|
operator=
|
operator=
|
Assigns values to the container | |
get_allocator
|
get_allocator
|
get_allocator
|
get_allocator
|
Returns the allocator used to allocate memory for the elements | |
Element access | — | at
|
— | — | Accesses specified element with bounds checking. |
— | operator[]
|
— | — | Accesses specified element without bounds checking. | |
Iterators | begin
|
begin
|
begin
|
begin
|
Returns an iterator to the beginning of the container |
end
|
end
|
end
|
end
|
Returns an iterator to the end of the container | |
Capacity | empty
|
empty
|
empty
|
empty
|
Checks whether the container is empty |
size
|
size
|
size
|
size
|
Returns number of elements in the container. | |
max_size
|
max_size
|
max_size
|
max_size
|
Returns the maximum possible number of elements in the container | |
Modifiers | clear
|
clear
|
clear
|
clear
|
Clears the contents. |
insert
|
insert
|
insert
|
insert
|
Inserts elements. | |
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
|
Erases elements. | |
swap
|
swap
|
swap
|
swap
|
Swaps the contents with another container. | |
Lookup | count
|
count
|
count
|
count
|
Returns the number of elements matching specific key. |
find
|
find
|
find
|
find
|
Finds an element with specific key. | |
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;
या एसटीडी :: हैश फ़ंक्शन को विशेषज्ञता के द्वारा डिफ़ॉल्ट हैश फ़ंक्शन के रूप में सेट किया जा सकता है
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.