Насколько вездесущим является hash_map? - PullRequest
4 голосов
/ 03 марта 2009

Заголовки hash_map и hash_set еще не включены в стандарт C ++, но они доступны как расширения для всех компиляторов, которые я использовал в последнее время.

Мне интересно, насколько я могу положиться на них в реальном коде, не жертвуя переносимостью. Я работаю над проектами инструментов, которые должны выполняться на множестве архитектур и компиляторов, включая:

  • Linux (x86_64, AMD / Intel): GCC, Intel, портлендские компиляторы
  • AIX (мощность): GCC, xlC
  • Cray XT Series (AMD): GCC, Portland, компиляторы Pathscale
  • IBM Blue Gene Series (Power): xlC, GCC
  • SGI Altix (Itanium): Компиляторы Intel
  • Windows: Не совсем приоритет, но не стесняйтесь давать полезные ответы.

Я понимаю, что некоторые из них довольно экзотичны, но это не главное. Какой у вас опыт работы с расширениями STL для разных платформ и компиляторов? Они вездесущи еще? вы будете использовать их в своем проекте?

Ответы [ 2 ]

13 голосов
/ 03 марта 2009

Я бы, наверное, искал буст-эквивелант и использовал бы его. По крайней мере, они испытывают давление со стороны своих пользователей, чтобы они не зависели от платформы. Я не могу себе представить, что произойдет, если вы отправите сообщение об ошибке в компиляторы GCC и Intel и попросите их согласовать различия в том, как реализован hash_map. В лучшем случае вы сможете заставить их говорить друг с другом. Предположим, вы даже достигли этого, тогда вы только исправили разницу между компиляторами Intel и GCC. Удачи собрать всех вместе и решить проблему в течение нескольких лет.

По крайней мере, с надстройкой вы знаете, что какие-то различия между платформами разрабатываются одной организацией ..

EDIT Эквивалент усиления, по-видимому, неупорядоченный набор или неупорядоченная карта . (спасибо Head Geek)

5 голосов
/ 03 марта 2009

НЕТ, вы бы написали свое, если вы достаточно большая организация / проект. Таким образом, вы можете адаптировать их под свои нужды и решить проблемы с переносимостью. EA сделала это, с их «eastl», предназначенным для всех игровых платформ, ПК, Mac, XBOX360, Wii, PS2, PS3 и т.д ...

...