Подтвердить что ты не робот

Я хотел бы увидеть пример hash_map в С++

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

4b9b3361

Ответ 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"] );

Ответ 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, порядок вообще не имеет смысла.