共用方式為


hash_map::hash_map

注意事項注意事項

這個 API 已經過時。這個選項是 unordered_map Class

建構是空的或為其他 hash_map 全部或部分的複本的 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
);

參數

參數

描述

_Al

為這個 hash_map 物件所要使用的儲存體配置器類別,預設為 Allocator

_Comp

型別 const 用來 Traits 的比較函式以 hash_map 的項目,預設為 hash_compare

_Right

建構的對應是複本的 hash_map。

_First

第一個項目位置要複製到的元素範圍內的。

_Last

第一個項目位置要複製之項目範圍的。

備註

所有建構函式所儲存的配置器物件型別處理 hash_map 的記憶體儲存,並可藉由呼叫 get_allocator後傳回。 配置器參數在用於類別宣告和前置處理器巨集通常省略替代替代的配置器。

所有建構函式初始化其 hash_map。

所有建構函式儲存用來建立在 hash_map 索引鍵中的命令,並且可以藉由呼叫 key_comp後傳回型別 Traits 的函式物件。

指定空的初始 hash_map,第二個指定的比較函式 (_Comp) 的型別用來建立項目和三個命令明確指定配置器類型 (_Al) 的,此外,前三個建構函式會使用。 關鍵字 explicit 隱藏特定種類的自動型別轉換。

第四個建構函式指定 hash_map _Right的複本。

接下來的三個建構函式複製範圍 [_First, _Last) 的 hash_map 隨著在指定類別 Traits 和配置器的比較函式型別的明確的加入。

最後建構函式移動 hash_map _Right。

範例

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

範例輸出

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

需求

標題: <hash_map>

命名空間: stdext

請參閱

參考

hash_map Class

標準樣板程式庫