2012-02-25 102 views
0

我是一个很大的java粉丝,但我现在必须在C++上为一个项目工作。我打算给你一个java hashmap类的C++特性。谷歌搜索后,我发现在C++ STL库中不存在hashmap/hashtable。但是我发现了这些数据类型:map,unordered_map,unorderd_set和hash_map。 hash_map是微软的特定的dll /库,其余的都在STL下使用。我必须使用IBM XL C/C++编译器。所以我不能使用微软/提升,因为我的公司不推荐他们。我必须使用特定的STL。请提供关于这些收藏的一些信息。如果我必须选择hashmap功能,那么在这些STL细节中最好是什么?提前致谢。这些在C++中有什么区别?

+6

即使是半感兴趣的第二眼也应该向您透露'unordered_map/set'是一个散列容器。它是C++ 11,Boost和TR1的一部分,其中的任何一个都应该做到这一点。 – 2012-02-25 15:31:56

回答

1

您是否看过维基百科的页面associative containers in C++

如果您想要真正的哈希表(使用提供哈希码的密钥,但键之间没有顺序),您可以使用C++ 2011 std::unordered_map模板。在这方面,你需要一个最近足够支持C++ 11的编译器。

如果您可以提供关键的订单,也可以考虑使用std::map,即使在早期的C++ 03标准中也可以使用。

+0

如果订单无关紧要怎么办?我的意思是,我所需要的仅仅是一个键值对集合,它可以存储键值对,并在需要时检索给定键的值。 – volatNumbers 2012-02-25 15:43:52

+1

如果仅限于C++ 03(不是C++ 11,而不是TR1,不是boost),那么将值与键关联的最简单方法是对该键类型提供一些顺序并使用'std :: map' 。该命令可能对您而言并不重要,但可能很容易提供。 – 2012-02-25 15:47:24

+0

如何提供订单?任何参考请.. – volatNumbers 2012-02-25 15:57:39

4

unordered_map相当于java的HashMap,它是一个哈希映射 - 所以它可能是你以后的样子。

map相当于java中的TreeMap。它被实施为red-black tree

unordered_set相当于java的HashSet。它只包含密钥,而不包含(key,value)