Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Note
This API is obsolete. The alternative is unordered_map Class.
Constructs a hash_map that is empty or that is a copy of all or part of some other hash_map.
hash_map( );
explicit hash_map(
const Traits& _Comp
);
hash_map(
const Traits& _Comp,
const Allocator& _Al
);
hash_map(
const hash_map& _Right
);
template<class InputIterator>
hash_map(
InputIterator _First,
InputIterator _Last
);
template<class InputIterator>
hash_map(
InputIterator _First,
InputIterator _Last,
const Traits& _Comp
);
template<class InputIterator>
hash_map(
InputIterator _First,
InputIterator _Last,
const Traits& _Comp,
const Allocator& _Al
);
hash_map(
hash_map&& _Right
);
Parameters
Parameter |
Description |
_Al |
The storage allocator class to be used for this hash_map object, which defaults to Allocator. |
_Comp |
The comparison function of type constTraits used to order the elements in the hash_map, which defaults to hash_compare. |
_Right |
The hash_map of which the constructed map is to be a copy. |
_First |
The position of the first element in the range of elements to be copied. |
_Last |
The position of the first element beyond the range of elements to be copied. |
Remarks
All constructors store a type of allocator object that manages memory storage for the hash_map and that can later be returned by calling get_allocator. The allocator parameter is often omitted in the class declarations and preprocessing macros used to substitute alternative allocators.
All constructors initialize their hash_map.
All constructors store a function object of type Traits that is used to establish an order among the keys of the hash_map and that can later be returned by calling key_comp.
The first three constructors specify an empty initial hash_map, the second, in addition, specifying the type of comparison function (_Comp) to be used in establishing the order of the elements and the third explicitly specifying the allocator type (_Al) to be used. The keyword explicit suppresses certain kinds of automatic type conversion.
The fourth constructor specifies a copy of the hash_map _Right.
The next three constructors copy the range [_First, _Last) of a hash_map with increasing explicitness in specifying the type of comparison function of class Traits and allocator.
The last constructor moves the hash_map _Right.
Example
// hash_map_hash_map.cpp
// compile with: /EHsc
#include <ostream>
#include <hash_map>
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
typedef char * MyStr;
struct MyInt
{
int i;
friend ostream& operator<<(ostream& ii, MyInt& jj);
MyInt(int j = 0) {
i = j;
}
};
struct greater_str
{
bool operator()(const MyStr & x, const MyStr & y) const {
if (strcmp(x, y) < 0)
return true;
return false;
}
};
struct less_str {
bool operator()(const MyStr & x, const MyStr & y) const
{
if (strcmp(x, y) > 0)
return true;
return false;
}
};
ostream& operator<<(ostream& o, MyInt& j) {
o << j.i;
return o;
}
int main()
{
using namespace stdext;
typedef pair <MyStr, MyInt> Int_Pair;
hash_map<MyStr, MyInt>::iterator hm1_Iter, hm3_Iter, hm4_Iter, hm5_Iter, hm6_Iter, hm7_iter;
hash_map<MyStr, MyInt, hash_compare<MyStr, greater_str> >::iterator hm2_Iter;
// Create an empty hash_map hm0 of key type integer
hash_map<MyStr, MyInt> hm0;
// Create an empty hash_map hm1 with the key comparison
// function of less than, then insert 4 elements
hash_map<MyStr, MyInt, hash_compare<MyStr, less_str> > hm1;
hm1.insert(Int_Pair("one", 0));
hm1.insert(Int_Pair("two", 10));
hm1.insert(Int_Pair("three", 20));
hm1.insert(Int_Pair("four", 30));
hm1.insert(Int_Pair("five", 40));
// Create an empty hash_map hm2 with the key comparison
// function of geater than, then insert 2 elements
hash_map<MyStr, MyInt, hash_compare<MyStr, greater_str> > hm2;
hm2.insert(Int_Pair("one", 10));
hm2.insert(Int_Pair("two", 20));
// Create a hash_map hm3 with the
// allocator of hash_map hm1
hash_map<MyStr, MyInt>::allocator_type hm1_Alloc;
hm1_Alloc = hm1.get_allocator();
hash_map<MyStr, MyInt, hash_compare<MyStr, less_str> > hm3(hash_compare<MyStr, less_str > (), hm1_Alloc);
hm3.insert(Int_Pair("three", 30));
// Create a copy, hash_map hm4, of hash_map hm1
hash_map<MyStr, MyInt, hash_compare<MyStr, less_str> > hm4(hm1);
// Create a hash_map hm5 by copying the range hm1[_First, _Last)
hash_map<MyStr, MyInt>::const_iterator hm1_bcIter, hm1_ecIter;
hm1_bcIter = hm1.begin();
hm1_ecIter = hm1.begin();
hm1_ecIter++;
hm1_ecIter++;
hash_map<MyStr, MyInt> hm5(hm1_bcIter, hm1_ecIter);
// Create a hash_map hm6 by copying the range hm4[_First, _Last)
// and with the allocator of hash_map hm2
hash_map<MyStr, MyInt>::allocator_type hm2_Alloc;
hm2_Alloc = hm2.get_allocator();
hash_map<MyStr, MyInt, hash_compare<MyStr, less_str> > hm6(hm4.begin(), ++hm4.begin(), hash_compare<MyStr, less_str > (), hm2_Alloc);
cout << "hm1 =";
for (hm1_Iter = hm1.begin(); hm1_Iter != hm1.end(); hm1_Iter++)
cout << " " << hm1_Iter -> second;
cout << endl;
cout << "hm2 =";
for (hm2_Iter = hm2.begin(); hm2_Iter != hm2.end(); hm2_Iter++)
cout << " " << hm2_Iter -> second;
cout << endl;
cout << "hm3 =";
for (hm3_Iter = hm3.begin(); hm3_Iter != hm3.end(); hm3_Iter++)
cout << " " << hm3_Iter -> second;
cout << endl;
cout << "hm4 =";
for (hm4_Iter = hm4.begin(); hm4_Iter != hm4.end(); hm4_Iter++)
cout << " " << hm4_Iter -> second;
cout << endl;
cout << "hm5 =";
for (hm5_Iter = hm5.begin(); hm5_Iter != hm5.end(); hm5_Iter++)
cout << " " << hm5_Iter -> second;
cout << endl;
cout << "hm6 =";
for (hm6_Iter = hm6.begin(); hm6_Iter != hm6.end(); hm6_Iter++)
cout << " " << hm6_Iter -> second;
cout << endl;
// Create a copy, hash_map hm7, of hash_map hm1 by moving
hash_map<MyStr, MyInt, hash_compare<MyStr, less_str> >
hm7(move(hm1));
cout << "hm7 =";
for (hm7_Iter = hm7.begin(); hm7_Iter != hm7.end(); hm7_Iter++)
cout << " " << hm7_Iter -> second;
cout << endl;
}
Sample Output
hm1 = 20 0 30 40 10
hm2 = 10 20
hm3 = 30
hm4 = 20 0 30 40 10
hm5 = 0 20
hm6 = 20
hm7 = 20 0 30 40 10
Requirements
Header: <hash_map>
Namespace: stdext