« C++のハッシュテーブル hash_map | トップページ | JAVAのハッシュテーブル HashMap »

2008年12月15日 (月)

C#のハッシュテーブル Dictionary

stdext::hash_map [VC++2003]
System.Collections.Generic.Dictionary(K,V) [C#2008 Express Edition]
java.util.HashMap<K,V> [J2SE 1.6.0_03]

以上のコレクション(コンテナ)の使い方比較。(自分の知識を整理するためのメモです。)

ここではC#のハッシュテーブル Dictionay(K, V)の使い方を具体的にまとめた。


キー・値ともにオブジェクト型の場合
キーとなるオブジェクトのクラスをKで表記
値となるオブジェクトのクラスをVで表記

[using namespace]
using System.Collections.Generic;

[IEqualityComparerインターフェースの実装]
2つのメンバー関数を実装する。

    class KEqualityComparer : IEqualityComparer<K> {
        public bool Equals(K k1, K k2) {
            return ....;
        }
        public int GetHashCode(K k) {
            return ....;
        }
    }

[Dictionaryオブジェクトの宣言]
    Dictionary<K, V> kvd = new Dictionary<K, V>(new KEqualityComparer());

[キー対値の登録]
    kvd.Add(new K(....), new V(....));

[検索]
K k = new K(....); // 検索キー
    if (kvd.ContainsKey(k) == true) { // 見つかった
        // kvd[k] で値オブジェクトが参照できる
        kvd[k].Vのメンバー
    } else { // 見つからない

キーが存在しないとき kvd[k]はKeyNotFoundException例外となる。


キーが値型(int)、値がオブジェクト型の場合

[IEqualityComparerインターフェースの実装]
同様に定義する。

    class IntEqualityComparer : IEqualityComparer<int> {
        public bool Equals(int k1, int k2) {
            return (k1 == k2);
        }
        public int GetHashCode(int k) {
            return k;
        }
    }

[Dictionaryオブジェクトの宣言]
    Dictionary<int, V> ivd = new Dictionary<int, V>(new IntEqualityComparer());

[キー対値の登録]
    ivd.Add(int値, new V(....));

[検索]
int k = ....; // 検索キー
以下同様。

« C++のハッシュテーブル hash_map | トップページ | JAVAのハッシュテーブル HashMap »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: C#のハッシュテーブル Dictionary:

« C++のハッシュテーブル hash_map | トップページ | JAVAのハッシュテーブル HashMap »