2009-03-03 3 views
4

hash_maphash_setヘッダーはまだC++標準には含まれていませんが、最近使用したすべてのコンパイラで拡張機能として利用できます。どのようにユビキタスがhash_mapですか?

私は、移植性を犠牲にすることなくこれらを実際のコードにどれだけ頼ることができるのだろうかと思っています。

  • のLinux(x86_64版、AMD/Intelの):: GCC、インテル、ポートランドコンパイラ
  • AIX(Iには、アーキテクチャとコンパイラのホスト上で実行するために必要なツールのプロジェクトに取り組んでいますパワー): GCC、のxlC
  • のCray XTシリーズ(AMD): GCC、ポートランド、Pathscaleコンパイラ
  • IBMのBlue Geneシリーズ(パワー):のxlC、GCC
  • SGI Altixの(Itaniumベース):インテル®コンパイラー
  • Windowsの
  • そうでもない優先順位が、有益な答えを提供して自由に感じます。

私はこれらがかなりエキゾチックであることを理解していますが、それはポイントではありません。複数のプラットフォームやコンパイラでのSTL拡張の経験は何ですか?それらはまだどこに遍在していますか? あなたはをあなたのプロジェクトで使用しますか?

+2

単純な答え:hash_mapを使用しないでください。代わりにunordered_mapまたはunordered_setを使用してください。 –

答えて

13

私はおそらくブーストequivelantを探してそれを使用します。少なくとも、プラットフォームに依存しないようにするためには、ユーザーからの圧力が必要です。あなたがGCCとインテルのコンパイラとのバグを提出し、hash_mapの実装方法の相違点を調整するように指示した場合、どうなるか想像もできません。あなたはお互いに話すことができれば最高です。たとえインテルとGCCのコンパイラーが異なるのかだけを修正したとします。誰もが一緒になって数年以内に問題を解決することを祈ってください。

少なくともブーストであなたがプラットフォーム間で違いがある組織で働いされている知っている...

EDIT ブースト同等のは明らかunordered setまたはunordered mapです。 (おかげでHead Geek)

+1

"Boost equivalent"は、私が間違っていなければ、 'unordered_map'と' unordered_set'です。あなたはかなり最近のバージョンのBoostを必要とします。 –

+1

それは次のような標準になるだろうと私は信じています。 –

5

いいえ、組織/プロジェクトが十分に大きい場合は、自分で作成します。そうすれば、あなたのニーズに合わせて適切に調整し、移植性の問題に取り組むことができます。 EAは、ゲームプラットフォーム、PC、Mac、XBOX360、Wii、PS2、PS3などをターゲットにした "eastl"を使ってこれを行いました...

関連する問題