Насколько распространен hash_map?
-
03-07-2019 - |
Вопрос
А hash_map
и hash_set
заголовки еще не включены в стандарт C++, но они доступны в виде расширений для всех компиляторов, которые я использовал в последнее время.
Мне интересно, насколько я могу полагаться на них в реальном коде, не жертвуя при этом переносимостью.Я работаю над проектами инструментов, которые необходимо запускать на множестве архитектур и компиляторов, в том числе:
- Linux (x86_64, AMD/Intel): GCC, Intel, Портлендские компиляторы
- AIX (Мощность): ССЗ, XLC
- Серия Cray XT (AMD): GCC, Портленд, компиляторы Pathscale
- Серия IBM Blue Gene (мощность): XLC, GCC
- SGI Altix (Итаниум): Интел-компиляторы
- Окна: На самом деле это не приоритет, но не стесняйтесь давать полезные ответы.
Я понимаю, что некоторые из них довольно экзотичны, но дело не в этом.Каков ваш опыт использования расширений STL на разных платформах и компиляторах?Они уже вездесущи?Бы ты использовать их в своем проекте?
Решение
Я бы, вероятно, поискал эквивалент повышения и использовал его.По крайней мере, на них оказывается некоторое давление со стороны пользователей, требующих независимости от платформы.Я не могу себе представить, что произойдет, если вы зарегистрируете ошибку в компиляторах GCC и Intel и попросите их урегулировать разногласия по поводу реализации hash_map.В лучшем случае вам удастся заставить их поговорить друг с другом.Предположим, вы даже этого добились, тогда вы всего лишь исправили разницу между компиляторами Intel и GCC.Удачи вам собрать всех вместе и решить проблему в течение нескольких лет.
По крайней мере, с помощью Boost вы знаете, что любые различия между платформами решаются одной организацией.
РЕДАКТИРОВАТЬЭквивалент повышения, по-видимому, неупорядоченное множество или неупорядоченная карта.(спасибо Главному Компьютерщику)
Другие советы
НЕТ, вы бы написали свой собственный, если вы достаточно большая организация/проект.Таким образом, вы сможете адаптировать их так, чтобы они лучше соответствовали вашим потребностям и решали проблемы переносимости.EA сделала это со своим «eastl», предназначенным для всех игровых платформ: ПК, Mac, XBOX360, Wii, PS2, PS3 и т. д.