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
?
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.
#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"] );
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
Wikipedia nigdy nie zawodzi:
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
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.
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