Chciałbym zobaczyć przykład Mapy hash w C++

Nie wiem jak używać funkcji hash w C++, ale wiem, że możemy używać hash_map. Czy g++ wspiera to po prostu włączając #include <hash_map>? Czym jest prosty przykład użycia hash_map?

 47
Author: Michael Petrotta, 2010-02-01

5 answers

Obecny standard C++ nie ma map hashowych, ale nadchodzący standard C++0x tak, a te są już obsługiwane przez g++ w postaci "nieuporządkowanych map":

#include <unordered_map>
#include <iostream>
#include <string>
using namespace std;

int main() {
    unordered_map <string, int> m;
    m["foo"] = 42;
    cout << m["foo"] << endl;
}

Aby uzyskać kompilację, musisz powiedzieć g++, że używasz C++0x:

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

Te mapy działają podobnie jak std:: map, z tym wyjątkiem, że zamiast dostarczać niestandardowe operator<() dla własnych typów, musisz dostarczyć niestandardową funkcję hash - odpowiednie funkcje są dostarczane dla typów takich jak liczby całkowite i sznurki.

 51
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-01 20:56:55

#include <tr1/unordered_map> Otrzymasz następny-standard C++ unikalny kontener hashowy . Sposób użycia:

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
Author: Nikolai Fetissov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-01 20:58:15
 4
Author: Manuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-01 20:49:21

Hash_map jest niestandardowym rozszerzeniem. unordered_map jest częścią STD:: tr1 i zostanie przeniesiona do przestrzeni nazw std dla C++0x. http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29

 4
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-01 20:50:57

Nazwa przyjęta do TR1 (i szkic do następnego standardu) to std::unordered_map, więc jeśli masz taką dostępną, prawdopodobnie jest to ta, której chcesz użyć.

Poza tym, używanie go jest podobne do używania std::map, z tym zastrzeżeniem,że kiedy / jeśli przechodzisz przez elementy w std::map, wychodzą one w kolejności określonej przez operator<, ale dla unordered_map, kolejność jest ogólnie bez znaczenia.

 1
Author: Jerry Coffin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-01 20:52:29