2011-05-06 26 views
50

快速问题......散列图是STL的一部分吗?hash_map是STL的一部分吗?

+2

号使用'unordered_map'。你真的需要一个哈希映射吗?如果没有看到'std :: map'是否符合你的实际需求。 – 2011-05-06 08:17:08

+6

@Martin:'hash_map' ***是***的一部分。 – 2011-05-06 08:21:41

+10

请定义STL。你的意思是C++标准库吗?或者你的意思是多年前发布的原始标准模板库,后来被部分采用为当前的C++标准?通常我们并不关心你是否将stl非正式地用作stdlib,但在这种情况下它很重要。标准C++没有'hash_map',STL。 (未来的C++和Boost有'unordered_map',一个哈希映射。) – GManNickG 2011-05-06 08:28:37

回答

13

引用维基百科(强调):

STL页:

标准模板库(STL)是包含在C++标准库中的软件库部分

...,然后从hash_map页面

在C++编程语言, hash_map是在标准 模板库散列 关联容器的名称。它由 几个实现者提供,例如GNU C++编译器和Microsoft的Visual C++。 这不是C++ 标准库的一部分,但在C++ 技术报告1包含了非常 类似容器unordered_map,这 将包含在即将到来的C++ 0x 标准。

因此,在短期,

  • 它是STL的一部分。
  • 但它不是标准库的一部分。
  • 但它是由几个非常流行的实现支持。
+2

@razlebe:你不能只说是或否? – forsvarir 2011-05-06 08:13:15

+3

@forsvarir:当然,但引用维基百科为我的答案提供了一些可信度。 ;) – razlebe 2011-05-06 08:14:03

+0

重要的是,知道它只是适度可移植的,如果您选择使用它,那么请检查您的编译器文档以找出它所在的头文件和命名空间 - 它可能不是一个简单的'#include '/'std: :的hash_map x',虽然它不会有太大的困难.... – 2011-05-06 08:14:49

-2

否... Hash_map不是STL标准的一部分。

+5

STL标准没有这样的东西。 – 2011-05-06 08:21:59

+2

@AlexandreC:ISO,ANSI等没有STL标准,但没有理由不考虑STL文档(例如在sgi.com)作为其事实标准。 – 2011-05-06 08:31:19

+0

@Alexandre C:或者有几种,取决于你对** STL **的定义。 – 2011-05-06 08:32:10

7

问题在于对术语STL没有商定意义。标准C++的一部分是hash_map吗?不,它不是。然而,unordered_map将成为新的C++标准的一部分,并且是使用散列实现的映射。

+1

如果您定义的** STL **包含一些现成的实现,那么它可能包含'hash_map'。 – 2011-05-06 08:29:09

+4

有一个商定的含义。只是有些人不同意。 – 2011-05-06 08:40:11

+0

@Tomalak如果有人不同意它,那么就没有达成一致。 – 2011-05-06 08:54:46

4

hash_mapSTL的一部分。但是,它是而不是 C++ 03的标准库的一部分。

+0

真的吗?我在C++ 0x FDIS中找不到'hash_map'。你有没有证据支持你的说法? – fredoverflow 2011-05-06 08:25:20

+1

哦,等等,你的意思是不同的STL,没关系。 – fredoverflow 2011-05-06 08:25:57

+4

@FredOverflow:尽管你有误解,但只有一个STL_。 – 2011-05-06 08:32:11