2012-11-13 3 views
7

私は組み込みアプリケーションを作成していますが、私が使用する環境では残念ながらC++ 11のサポートはありません。hash_map/unordered_mapの分離バージョン

ハッシュ/順序付けされていないマップ(通常はstd::mapが性能上の理由で実行されません)を実装する必要がありますが、それをきれいに行う方法が見つからないようです。

Boostは、実質的にライブラリ全体を持ち込むことなく働きたくありません。 SGIの元のSTL hash_mapでもいくつかのヘッダーが必要で、標準ライブラリの機能が重複し、あいまいな関数呼び出しが発生します。それは本当の混乱です。

バージョン管理、品質管理、V & Vなど既存の標準ライブラリを活用し、すべてのファイルと同じフォルダに置くことができるヘッダーファイルがほんの少しだけ必要です他のソース/ヘッダーファイル。そんなことが存在するのですか、私は希望がありませんか?私は長い間捜し求めましたが、空手になってきました。

ありがとうございました。私は必要があれば確かにさらに明確にすることができます。

+0

カスタムアロケータで 'std :: map'を使ってみましたか?おそらくあなたのパフォーマンスの問題はすべて修正されているはずです。 –

+0

私の問題は、マップから常に新しい要素を削除/配置することです。これが起こるたびに物事を並べ替える必要がある場合は、遅すぎます。それはカスタムアロケータで解決できますか?私の無知で申し訳ありませんが、私は一度も 'std :: allocator'を使用したことはありません。 – llakais

+2

バランシングが顕著なパフォーマンス上の問題を引き起こしたケースは一度もありませんでした。それが本当ですか? RBツリーのバランシングは非常に高速で、ツリーが非常に片側にある場合にのみバランスがとれます。 –

答えて

1

あなたはGNUの実装を見ましたか?私のUbuntuマシンでは、unordered_map.hには何も含まれていません。このファイルは/usr/include/c++/4.6/内のファイル「unordered_mapは、」複数のヘッダを持っていますが、私は推測したものを微調整することができますが、約400行です

/usr/include/c++/4.6/bits/unordered_map.h 

に位置しています。

私はGNU.org(?)から実装のためのソースコードを見つけ出して自分でコンパイルできると思いますか?

+0

私はUbuntuでこれをチェックします。チップのおかげで! – llakais

+0

申し訳ありませんが、これは私がチェックアウトするのにとても時間がかかりました...私はあなたが本当に 'unordered_map'ファイルをトップレベルのフォルダに含める必要があると思いますが、私はいくつかの微調整はファイルの総数持ち込まなければならない。いずれにせよ、これは古いSGI STLを使用するよりもはるかに優れています。再度、感謝します。 – llakais