С ++ <map>противпротивпротив - PullRequest
       43

С ++ <map>противпротивпротив

5 голосов
/ 22 декабря 2010

В настоящее время я ищу лучшую альтернативу std :: map и наткнулся на классы, упомянутые в заголовке поста.Может ли кто-то уточнить различия между ними не с точки зрения производительности / API, а с точки зрения того, где они находятся по отношению к текущему и последующему стандарту.

Ответы [ 3 ]

10 голосов
/ 22 декабря 2010
  • std :: map: текущий стандартный ассоциативный контейнер C ++ (ключ / значение), который работает как дерево позади;
  • std :: unordered_map: следующий стандарт (C ++ 0x -- или в Техническом отчете 1) контейнер хеш-карты, который работает как хэш-карта ...
  • std :: tr1 :: unordered_map: такой же, как предыдущий, но в пространстве имен tr1, частовстречается в компиляторах, желающих предоставить расширения TR1, но в другом пространстве имен, чем std.
  • ext :: unordered_map: все та же идея, но реализация, специфичная для компилятора, поэтому она не обязательно будет точно такой же, как std :: unordered_map, по интерфейсу и реализации.

Если можете, используйте std :: unordered_map, так как это окончательное имя реализации карты хеша (если вам нужна карта хеша).Другие имена есть в случае, если ваш компилятор предоставляет их, но в отдельном пространстве имен (так как C ++ 0x официально еще не доступен).

Кстати, есть boost :: unordered_map, но это почти все та же идея и интерфейс.

1 голос
/ 22 декабря 2010

Заголовки в <tr1/*> - это вещи, которые были указаны в TR1 'draft'.Я полагаю, что многие из них, вероятно, перейдут в C ++ 0x (хотя это не гарантировано и есть возможности для несовместимых изменений).<ext/*> - это нестандартные (т.е. специфичные для поставщика) расширения, насколько я понимаю.Boost также предоставляет unordered_map , что может быть полезно, если вы пытаетесь настроить таргетинг на компиляторы, которые не предоставляют ни один из упомянутых вами заголовков.

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

Если вы говорите о ext / unordered_map, то это старый компонент SGI / HP STL. Это очень похоже на другие unordered_maps. Я бы использовал std :: unordered_map в качестве стандартного компонента - это будущее.

Я понимаю, что старые хеш-контейнеры SGI / HP едва не были включены в стандарт C ++ 98 по некоторым причинам.

...