2016-10-18 20 views
-2

問題を解決していますが、その中には配列をハッシュテーブルに変換する必要がありますが、配列に重複が含まれている可能性があります。今繰り返し値を持つ配列からハッシュを作成する方法

が、私は単純に行っている可能性が全く重複していない場合: -

unordered_map<int,int>hash; 

for(int i=0; i<size; i++){ 
hash[arr[i]] = arr[i]; 
} 

は、私は繰り返し、キーと値の場合には何をすべきかわかりません。 ご協力いただければ幸いです。

+2

intをハッシュしていますか? – UKMonkey

+0

'hash [arr [i]] = arr [i]'ここで実際に何をしているのですか?値とキーが同じものなら、 'multiset'または' unodered_multiset'を使わないのはなぜですか? –

+0

ハッシュテーブル*キー*の目的は、配列の序数、またはその序数に格納されている値ですか?あなたはその値を使いたいと思うように見えます。それに対する答えは、あなたがこれをどうやって行うかにとって非常に重要です。ハッシュマップが単純に配列の値をキー入力しているのであれば、単にあなたが今持っているものではなく、ループ内で単純に++ハッシュ[arr [i]];でオカレンスカウントを累積することができます。 – WhozCraig

答えて

1

これは達成したいことによって異なります。 std::unordered_multimapを使用してください。繰り返し回数をカウントし、マップの値に格納します。

0

単純なハッシュでは、ハッシュされたインスタンスは、通常、ハッシュとともに格納されます。

これにより、==または<を公開後にテストすることができます。 hash(a) == hash(b) & & a != bの場合は、衝突がなくなるようにハッシュを変更するか、hash-> vectorを設定します。または2.あなたがハッシュを使用したいものに正確に依存します。

関連する問題