Unordered associative containers (C++)
C++ Standard Library |
---|
Containers |
C standard library |
In computing, unordered associative containers refer to a group of class templates in the standard library of the C++ programming language that implement variations of hash table. Being templates, they can be used to store arbitrary elements, such as integers or custom classes. The following containers are defined in the current revision of the C++ standard: unordered_set
, unordered_map
, unordered_multiset
, unordered_multimap
. Each of these containers differ only on constraints placed on their elements.
The unordered associative containers are similar to the associative containers in C++ standard library but has different constraints. As their name implies, the elements in the unordered associative containers are not ordered. This is due to the use of hashing to store objects. The containers can still be iterated through like a regular associative containers.
History
The first widely used implementation of hash tables in the C++ language was hash_map
, hash_set
, hash_multimap
, hash_multiset
class templates of the SGI STL.[1]. Due to its usefulness it was later included in several other implementations of the C++ standard library, e.g. in the GCC's libstdc++[2] or in MSVC standard library.
The hash_*
class templates were proposed into C++ TR1 and were accepted under names unordered_*
.[3] Later, they were incorporated into the C++11 revision of the C++ standard.[4]. An implementation is also available in the Boost C++ Libraries as <boost/unordered_map.hpp>
[5].
Design
![]() | This section needs expansion. You can help by adding to it. (October 2011) |
Overview of functions
unordered_map::unordered_map
(constructor) - Constructs the unordered map from variety of sources.unordered_map::~unordered_map
(destructor) - Destructs the unordered map and the contained elementsunordered_map::operator=
- Assigns values to the unordered mapunordered_map::get_allocator
- Returns the allocator used to allocate memory for the elements
- Iterators
- Capacity
- Modifiers
unordered_map::clear
- Clears the contentsunordered_map::insert
- Inserts elementsunordered_map::emplace
- Constructs elements in-placeunordered_map::emplace_hint
- Constructs elements in-place using a hintunordered_map::erase
- Erases elementsunordered_map::swap
- Swaps the contents with another unordered map
- Lookup
unordered_map::count
- Returns the number of elements matching specific keyunordered_map::find
- Finds an element with specific keyunordered_map::equal_range
- Returns a range of elements matching specific key
- Bucket interface
- ...
- Hash policy
- ...
- Observers
unordered_map::hash_function
- Returns the function used to create hash of a keyunordered_map::key_eq
- Returns key comparison function
Usage example
#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;
}
References
- ^ "hash_map<Key, Data, HashFcn, EqualKey, Alloc>". 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.
{{cite web}}
: CS1 maint: numeric names: authors list (link) - ^ WG21 (2010-08-21), Working Draft, Standard for Programming Language C++ (PDF), n3126
{{citation}}
: CS1 maint: numeric names: authors list (link) - ^ "Class template unordered_map". Boost. Retrieved 26 January 2011.