अनऑर्डरेड एसोसिएटिव कंटेनर (सी ++)
C++ Standard Library |
---|
Containers |
C standard library |
प्रोग्रामिंग लैंग्वेज C++ में, अनऑर्डरेड एसोसिएटिव कंटेनर सी ++ मानक पुस्तकालय में क्लास टेम्प्लेट का एक समूह है जो हैश तालिका वेरिएंट को लागू करता है। टेम्प्लेट (प्रोग्रामिंग) होने के नाते, उनका उपयोग मनमाने तत्वों, जैसे पूर्णांक या कस्टम कक्षाओं को संग्रहीत करने के लिए किया जा सकता है। निम्नलिखित कंटेनरों को सी ++ मानक के वर्तमान संशोधन में परिभाषित किया गया है: unordered_set
, unordered_map
, unordered_multiset
, unordered_multimap
. इनमें से प्रत्येक कंटेनर केवल उनके तत्वों पर रखी गई बाधाओं पर भिन्न होता है।
अनियंत्रित सहयोगी कंटेनर सी ++ मानक पुस्तकालय में सहयोगी कंटेनर के समान होते हैं लेकिन अलग-अलग बाधाएं होती हैं। जैसा कि उनके नाम से पता चलता है, अनियंत्रित साहचर्य कंटेनरों में तत्व अच्छी तरह से ऑर्डर नहीं कर रहे हैं। यह वस्तुओं को स्टोर करने के लिए हैशिंग के उपयोग के कारण है। कंटेनर अभी भी नियमित सहयोगी कंटेनर की तरह पुनरावर्तक हो सकते हैं।
इतिहास
C++ भाषा में हैश टेबल का पहला व्यापक रूप से उपयोग किया जाने वाला कार्यान्वयन था hash_map
, hash_set
, hash_multimap
, hash_multiset
सिलिकॉन ग्राफिक्स (SGI) मानक टेम्पलेट लाइब्रेरी (STL) के क्लास टेम्प्लेट।[1] उनकी उपयोगिता के कारण, उन्हें बाद में C++ मानक लाइब्रेरी के कई अन्य कार्यान्वयनों में शामिल किया गया (उदाहरण के लिए, जीएनयू संकलक संग्रह (GCC) libstdc++[2] और विजुअल सी ++ (एमएसवीसी) मानक पुस्तकालय)। hash_*
e> क्लास टेम्प्लेट सी ++ तकनीकी रिपोर्ट 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.