我想在C ++中看到一个hash_map示例

时间:2010-02-01 20:47:00

标签: c++ hashmap

我不知道如何在C ++中使用哈希函数,但我知道我们可以使用hash_map。通过简单地包含#include <hash_map>,g ++是否支持这一点?使用hash_map

的简单示例是什么?

5 个答案:

答案 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)

维基百科永远不会失望:

http://en.wikipedia.org/wiki/Hash_map_(C%2B%2B)

答案 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,顺序通常没有意义。