我不知道如何在C ++中使用哈希函数,但我知道我们可以使用hash_map
。通过简单地包含#include <hash_map>
,g ++是否支持这一点?使用hash_map
?
答案 0 :(得分:51)
当前的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<()
,而是需要提供自定义散列函数 - 为整数和类型等类型提供合适的函数。字符串。
答案 1 :(得分:9)
#include <tr1/unordered_map>
将为您提供下一个标准C ++ unique hash container。用法:
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"] );
答案 2 :(得分:5)
维基百科永远不会失望:
答案 3 :(得分:4)
hash_map是非标准扩展名。 unordered_map是std :: tr1的一部分,将被移动到C ++ 0x的std命名空间。 http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29
答案 4 :(得分:1)
TR1接受的名称(以及下一个标准的草稿)是std::unordered_map
,所以如果你有可用的名称,那么它可能就是你想要使用的名称。
除此之外,使用它与使用std::map
非常相似,条件是当/如果您遍历std::map
中的项目时,它们按照{{1}指定的顺序出现但是对于unordered_map,顺序通常没有意义。