Является ли hash_map частью STL? - PullRequest
57 голосов
/ 06 мая 2011

Быстрый вопрос ... Является ли hash_map частью STL?

Ответы [ 6 ]

102 голосов
/ 06 мая 2011

STL имеет hash_map, но стандартная библиотека C ++ не .

Из-за распространенное заблуждение, вы можете думать о стандартной библиотеке C ++ как о «STL», или о частях реализации стандартной библиотеки C ++ стандартной библиотеки C ++ как о «реализации STL».

Это не так.

Жаль, что и MSVC ++, и GCC (которые реализуют hash_map как расширение, специфичное для компилятора), помещают его в пространство имен std , которое не только сильно вводит в заблуждение,но также незаконно по стандарту.* вздох *

В C ++ 11 введено std::unordered_map, что не отличается.

15 голосов
/ 06 мая 2011

Цитирование Википедии (выделение добавлено):

со страницы STL :

Стандартная библиотека шаблонов (STL) - это библиотека программного обеспечения частично , включенная в стандартную библиотеку C ++.

... а затем со страницы hash_map page

На языке программирования C ++ hash_map - это имя хэша ассоциативный контейнер в стандарте Библиотека шаблонов . Это обеспечивается несколько разработчиков, таких как GNU Компилятор C ++ и Microsoft Visual C ++. Он не является частью C ++ Стандартная библиотека , но C ++ Технический отчет 1 содержит очень аналогичный контейнер unordered_map, который будет включен в предстоящий C ++ 0x стандарт.

Короче говоря,

  • ДА это часть STL.
  • Но это НЕ часть стандартной библиотеки.
  • Но это поддерживается несколькими очень популярными реализациями.
7 голосов
/ 06 мая 2011

Проблема в том, что нет единого значения для термина STL .hash_map является частью стандарта C ++?Нет, это не так.Однако unordered_map будет частью нового стандарта C ++ и представляет собой карту, реализованную с использованием хеширования.

5 голосов
/ 06 мая 2011

Да , hash_map является частью STL .Однако это не часть стандартной библиотеки C ++ 03.

2 голосов
/ 17 мая 2014

hash_map является частью STL, но не является частью стандарта C ++ (C ++ 11).И есть аналогичная реализация hash_map с именем "std :: unordered_map" в стандарте C ++: http://www.cplusplus.com/reference/unordered_map/unordered_map/

В настоящее время GNU C ++ и MSVC ++ реализовали hash_map для расширения компилятора, а также Boost.Между тем, у SGI есть собственная реализация hash_map.Подробнее см. http://www.sgi.com/tech/stl/hash_map.html.

0 голосов
/ 06 мая 2011

Нет ... Hash_map не является частью стандарта STL.

...