我想在 C++ 中查看 hash_map 示例

Posted

技术标签:

【中文标题】我想在 C++ 中查看 hash_map 示例【英文标题】:I would like to see a hash_map example in C++ 【发布时间】:2011-01-11 21:42:12 【问题描述】:

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

【问题讨论】:

@BlueRaja:是的,确实,使用它会导致人们认为hash_map 实际上是C++ 的一部分。我认为这就像任何其他与编程相关的问题一样,就在家里,不是吗?告诉人们使用 Google 是在浪费他们和我们的时间。他们是因为他们必须筛选成千上万个不准确和不可靠的答案,而我们是因为当他们稍后来这里提问时,我们必须消除他们所有的误解和不良做法。 @jalf:好像关于 SO 的答案在某种程度上保证是准确和可靠的。 保证他们会被其他程序员看到并投票给他们,这使得他们比大多数初学者在谷歌上盲目搜索的内容更值得信赖。 【参考方案1】:

***从不让人失望:

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

【讨论】:

【参考方案2】:

hash_map 是一个非标准的扩展。 unordered_map 是 std::tr1 的一部分,将被移动到 C++0x 的 std 命名空间中。 http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29

【讨论】:

【参考方案3】:

当前的 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&lt;() 之外,您需要提供自定义哈希函数 - 为整数和字符串等类型提供了合适的函数。

【讨论】:

@Kornel 不,我不应该。 TR1 从未被批准 - tr1 命名空间只是一些编译器提供的扩展。我从不在自己的代码中使用它。 @Neil,sooo,使用 GCC 3.4、MSVC 和其他非 C++0x 编译器的人不应该使用 TR1,但请等到开箱即用地支持 C++0x 库扩展? @Kornel 他们当然可以使用 TR1,但我不使用 VC++,所以良心上不能编辑我的答案以建议他们这样做。为了真正安全,这是我的大部分代码所做的,不要使用无序映射。这取决于您希望代码的可移植性。 @Neil,嗯,点了,但是在这种情况下,指向被添加到 C++0x 标准工作草案中的 Boost.Unordered 是否可以接受? Std 现在有一个map 数据结构。【参考方案4】:

#include &lt;tr1/unordered_map&gt; 将为您提供下一个标准 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"] );

【讨论】:

带有 C++ 风格容器的 C 风格输出?哎哟! 欢迎来到现实世界:)【参考方案5】:

TR1(以及下一个标准的草案)接受的名称是 std::unordered_map,所以如果您有这个名称,它可能就是您想要使用的名称。

除此之外,使用它很像使用std::map,附带条件是当/如果您遍历std::map 中的项目时,它们会按照operator&lt; 指定的顺序出现,但是对于unordered_map,顺序一般没有意义。

【讨论】:

以上是关于我想在 C++ 中查看 hash_map 示例的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中的 map 与 hash_map

gcc 在 VS 上使用 ext/hash_map 编译库

使用 C++ 教程和示例代码进行音频流传输 [关闭]

我的项目需要 GUI,该项目具有用 C++ (GNU) 编写的代码并涉及 hash_map 数据结构

hash_map 是 STL 的一部分吗?

c++ 为啥hashmap占用内存多