key型の変種

EqHashトレイトを実装している型ならば、なんでもHashMapのキーになることができます。例えば以下です。

  • bool (キーになりうる値が2つしかないので実用的ではないですが…)
  • intuint、あるいは他の整数型
  • String&str(Tips: Stringをキーにしたハッシュマップを作製した場合、.get()メソッドの引数に&strを与えて値を取得することができます。)

f32f64Hashを実装して いない ことに注意しましょう。おそらくこれは浮動小数点演算時に誤差が発生するため、キーとして使用すると、恐ろしいほどエラーの元となるためです。

集合型は、その要素となっている全ての型がEqを、あるいはHashを実装している場合、必ず同じトレイトを実装しています。例えば、Vec<T>THashを実装している場合、Hashを実装します。

独自の型にEqあるいはHashを実装するのは簡単です。以下の一行で済みます。 #[derive(PartialEq, Eq, Hash)]

後はコンパイラがよしなにしてくれます。これらのトレイトの詳細をコントロールしたい場合、EqHashを自分で実装することもできます。この文書ではHashトレイトを実装する方法の詳細については触れません。

structHashMapで扱う際の例として、とてもシンプルなユーザーログインシステムを作成してみましょう。

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX