0

ハッシュマップの実装を勉強しなければなりません。テンプレートに記載されている順序に従って要素をソートすることを調査しました。コード例は次のとおりです。

#include <hash_map>
#include <iostream>
using namespace std;

int main()
{
    typedef pair <int, int> Int_Pair;

    hash_map <int, int>::iterator hmp1_Iter;

    hash_map <int, int , hash_compare <int, less<int> > > hmp1;                 
    hmp1.insert(Int_Pair(1, 13));
    hmp1.insert(Int_Pair(3, 51));
    hmp1.insert(Int_Pair(7, 22));
    hmp1.insert(Int_Pair(2, 31));

    cout<<"\nOperation1: hash_map<int, int, \nhash_compare<int, less<int> > > hmp1\n";
    cout<<"Operation2: hmp1.insert(Int_Pair(1, 13))...\n";
    cout<<"hmp1 data: ";
    for(hmp1_Iter = hmp1.begin(); hmp1_Iter != hmp1.end(); hmp1_Iter++)
    cout<<hmp1_Iter->first<<":"<<hmp1_Iter->second<<" ";
    cout<<endl;

    return 0;

}

コードの期待される結果は 1:13 2:31 3:51 7:22 ですが、 1:31 3:51 7:22 2:31 となります。しかし、重要な要素を昇順に配置する必要があります.Plsはなぜこれが起こっているのか説明しますか?

4

2 に答える 2

2

std::hash_map順不同の連想コンテナで、通常はハッシュ テーブル (リンクされたリストの配列のインデックスとしてのキーのハッシュ) で実装されます。

「順序付きハッシュ マップ」が必要な場合は、std::map. これは通常、赤黒木であり、その主要な要素は昇順で繰り返すことができます。

std::hash_mapよりも挿入と削除が高速になるはずstd::mapです。

于 2013-04-08T12:23:00.380 に答える