Я хотел бы видеть пример hash_map в C ++ - PullRequest
49 голосов
/ 01 февраля 2010

Я не знаю, как использовать хеш-функцию в C ++, но я знаю, что мы можем использовать hash_map.G ++ поддерживает это, просто включив #include <hash_map>?Каков простой пример использования hash_map?

Ответы [ 5 ]

51 голосов
/ 01 февраля 2010

В текущем стандарте 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;
}

Чтобы получить этот компилятор, вам нужно сообщить g ++, что вы используете C ++ 0x:

g++ -std=c++0x main.cpp

Эти карты работают почти так же, как std :: map, за исключением того, что вместо предоставления пользовательского operator<() для ваших собственных типов, вам необходимо предоставить пользовательскую хеш-функцию - подходящие функции предоставляются для типов, таких как целые числа и строки.

9 голосов
/ 01 февраля 2010

#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"] );
5 голосов
/ 01 февраля 2010

Википедия никогда не подводит:

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

4 голосов
/ 01 февраля 2010

hash_map - это нестандартное расширение. unordered_map является частью std :: tr1 и будет перемещен в пространство имен std для C ++ 0x. http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29

1 голос
/ 01 февраля 2010

Имя, принятое в TR1 (и черновик для следующего стандарта), равно std::unordered_map, поэтому, если оно у вас есть, вероятно, вы захотите его использовать.

Кроме этого, его использование во многом похоже на использование std::map, при условии, что когда / если вы пересекаете элементы в std::map, они выходят в порядке, указанном operator<, но для unordered_map, порядок обычно не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...