Я не знаю, как использовать хэш-функцию в С++, но я знаю, что мы можем использовать hash_map
. Поддерживает ли g++ это просто включение #include <hash_map>
? Что такое простой пример с помощью hash_map
?
Я хотел бы увидеть пример hash_map в С++
Ответ 1
В текущем стандарте С++ нет хэш-карт, но следующий С++ 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++, что вы используете С++ 0x:
g++ -std=c++0x main.cpp
Эти карты работают практически так же, как и std:: map, за исключением того, что вместо предоставления пользовательского operator<()
для ваших собственных типов вам необходимо предоставить настраиваемую хеш-функцию - для таких типов, как целые числа и строки, предусмотрены соответствующие функции.
Ответ 2
#include <tr1/unordered_map>
предоставит вам следующий стандартный С++ уникальный хэш-контейнер. Использование:
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"] );
Ответ 3
Википедия никогда не отпускает:
Ответ 4
hash_map является нестандартным расширением. unordered_map является частью std:: tr1 и будет перемещен в пространство имен std для С++ 0x. http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29
Ответ 5
Имя, принятое в TR1 (и черновик для следующего стандарта), std::unordered_map
, поэтому, если у вас есть это, оно, вероятно, будет тем, которое вы хотите использовать.
Кроме того, использование этого очень похоже на использование std::map
, при условии, что когда/если вы пересекаете элементы в std::map
, они выходят в порядке, указанном operator<
, но для unordered_map, порядок вообще не имеет смысла.