web-dev-qa-db-ja.com

C ++でhash_mapの例を見てみたい

C++でハッシュ関数を使用する方法はわかりませんが、hash_mapを使用できることは知っています。 g ++は#include <hash_map>を含めるだけでそれをサポートしますか? hash_mapを使用した簡単な例は何ですか?

49
skydoor

現在の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<()を提供する代わりに、カスタムハッシュ関数を提供する必要があります-整数や文字列などの型に適切な関数が提供されます。

51
anon

#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"] );
9

ウィキペディアは決して失望させません。

http://en.wikipedia.org/wiki/Hash_map_(C%2B%2B)

5
Manuel

hash_mapは非標準の拡張機能です。 unordered_mapはstd :: tr1の一部であり、C++ 0xのstd名前空間に移動されます。 http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29

4
Ben

TR1(および次の標準のドラフト)で受け入れられる名前はstd::unordered_mapであるため、使用可能な場合は、おそらく使用したい名前です。

それ以外は、std::mapを使用するのとよく似ています。ただし、std::map内のアイテムをトラバースする場合は、operator<で指定された順序で出てきます。しかし、unordered_mapの場合、順序は一般に無意味です。

1
Jerry Coffin