Существует ли стандартный хэш-контейнер C ++? - PullRequest
4 голосов
/ 24 августа 2011

У меня есть множество учебников, в которых отмечается, что в STL изначально не было хеш-контейнера, но большинство также говорят, что в большинстве реализаций стандартной библиотеки есть хэш-контейнер в той или иной форме, поскольку это был известный недостаток.

Эти книги не обязательно настолько современны, насколько это возможно, и я немного запутался в том, что было действительно "стандартным" при поиске, поэтому:

На данный момент, сделать большинство стандартныхРеализации библиотеки предоставляют довольно непротиворечивый хэш-контейнер, и если это так, считается ли он частью STL?

Что такое «стандартный» заголовок для этого контейнера?(Я предполагаю, что это #include <hash>, но на всякий случай!).

Есть ли отдельно заданные для использования хэш-набор и карта хеша?

Ответы [ 5 ]

10 голосов
/ 24 августа 2011

Новый стандартный контейнер хеш-карты называется unordered_map. Вы можете включить его в свои файлы по #include <unordered_map>. Он является частью утвержденного в настоящее время стандарта C ++ 11.

До C ++ 11 у вас были различные вещи, такие как hash_map, которые (широко?) Поддерживались некоторыми поставщиками, чтобы вы могли их использовать, но если вы это сделали, ваш код не был действительно переносимым, потому что hash_map был не является частью стандарта. hash_map и все другие специфичные для поставщика версии структуры хэш-таблицы не должны использоваться сейчас.

6 голосов
/ 24 августа 2011

См. C ++ 11 типов:

  • unordered_map
  • unordered_set
  • unordered_multimap
  • unordered_multiset
2 голосов
/ 24 августа 2011

Не в текущем стандарте (03), вы можете использовать boost::unordered_map.В новом стандарте будет, std::unordered_map.

1 голос
/ 24 августа 2011

В пространстве имен TR1 есть несколько хеш-контейнеров.Смотрите, например, краткое вступление здесь: http://drdobbs.com/184402066

1 голос
/ 24 августа 2011

Новый стандарт C ++ 11 имеет хеш-эквивалентные контейнеры.В настоящее время их нет в большинстве реализаций, но они были в расширениях TR1 стандартной библиотеки, которые предоставляются с некоторыми реализациями.

...