2011-05-06 27 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