Share via


hash_map::hash_map

[!NOTA]

Esta API está obsoleta.La alternativa es unordered_map Class.

Construye un hash_map que está vacío o que es una copia de todo o parte de algún otro 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
);

Parámetros

Parámetro

Descripción

_Al

La clase del asignador de almacenamiento que se utilizará para este objeto de hash_map, que toma como valor predeterminado la Allocator.

_Comp

La función de comparación const tipo Traits utilizado para ordenar los elementos del hash_map, que toma como valor predeterminado la hash_compare.

_Right

El hash_map cuyo el mapa construido es ser una copia.

_First

La posición del primer elemento del intervalo de elementos que se copiarán.

_Last

La posición del primer elemento más allá del intervalo de elementos que se copiarán.

Comentarios

Todos los constructores almacenan un tipo de objeto del asignador que administra el almacenamiento de memoria para el hash_map y pueda devolver más adelante llamando a get_allocator.El parámetro de asignador se omite en las declaraciones de clase y las macros de preprocesamiento utilizadas para sustituir asignadores alternativos.

Todos los constructores inicializan su hash_map.

Todos los constructores almacenan un objeto de función Traits tipo que se utiliza para establecer una orden entre las claves de hash_map y pueda devolver más adelante llamando a key_comp.

Los primeros tres constructores especifican un hash_map inicial vacío, el segundo, además, especificando el tipo de función de comparación (_Comp) que se utilizará en el establecimiento del orden de los elementos y el tercero explícitamente que especifica el tipo del asignador (_Al) que se va a utilizar.La palabra clave explicit suprime ciertos tipos de conversión automática.

El cuarto constructor especifica una copia de hash_map _Right.

Los tres constructores siguientes copian el intervalo [_First, _Last) de un hash_map con la mejora de explicidad en especificar el tipo de función de comparación de la clase Traits y el asignador.

El constructor último mueve el hash_map _Right.

Ejemplo

// 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;
}

Resultados del ejemplo

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

Requisitos

Encabezado: <hash_map>

Stdext deEspacio de nombres:

Vea también

Referencia

hash_map Class

Biblioteca de plantillas estándar