C++でハッシュ関数を使用する方法はわかりませんが、hash_map
を使用できることは知っています。 g ++は#include <hash_map>
を含めるだけでそれをサポートしますか? hash_map
を使用した簡単な例は何ですか?
現在のC++標準にはハッシュマップはありませんが、次のC++ 0x標準にはあります。これらは、「順序付けられていないマップ」の形でg ++によって既にサポートされています。
_#include <unordered_map>
#include <iostream>
#include <string>
using namespace std;
int main() {
unordered_map <string, int> m;
m["foo"] = 42;
cout << m["foo"] << endl;
}
_
これをコンパイルするには、C++ 0xを使用していることをg ++に伝える必要があります。
_g++ -std=c++0x main.cpp
_
これらのマップはstd :: mapとほとんど同じように機能しますが、独自の型にカスタムoperator<()
を提供する代わりに、カスタムハッシュ関数を提供する必要があります-整数や文字列などの型に適切な関数が提供されます。
#include <tr1/unordered_map>
は、次の標準C++ 一意のハッシュコンテナー を取得します。使用法:
std::tr1::unordered_map<std::string,int> my_map;
my_map["answer"] = 42;
printf( "The answer to life and everything is: %d\n", my_map["answer"] );
ウィキペディアは決して失望させません。
hash_mapは非標準の拡張機能です。 unordered_mapはstd :: tr1の一部であり、C++ 0xのstd名前空間に移動されます。 http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29
TR1(および次の標準のドラフト)で受け入れられる名前はstd::unordered_map
であるため、使用可能な場合は、おそらく使用したい名前です。
それ以外は、std::map
を使用するのとよく似ています。ただし、std::map
内のアイテムをトラバースする場合は、operator<
で指定された順序で出てきます。しかし、unordered_mapの場合、順序は一般に無意味です。