web-dev-qa-db-ja.com

c ++ 11にBoost.Bimapの代替手段はありますか?

C++ 0xでBoostのバイマップに代わる使用可能な方法はありますか?

Boostは避けたいのですが、C++ 11を完全に採用しています。必要に応じて、Boostのバイマップのスリム化バージョンがプログラム全体で機能します(列挙型と対応する文字列を切り替えるには、一定のバイマップが必要です)。マップはコンパイル時定数になるため、手動で保守する2つのマップでさえ最適なソリューションではない可能性があります。

ありがとう!

更新:これはCode Projectで見つかりましたが、ライセンスが問題になる可能性があります: http://www.codeproject.com/KB/stl/bimap.aspx?fid=12042&df=90&mpp=25&noise=3&sort = Position&view = Quick&fr = 151#xx0xx

私はクリーンで簡単な解決策を探しています(私の場合、2つのミラーリングされたマップで同じように問題ないため、1つのヘッダー/ソースファイルまたは少し余分です)。

26
rubenvb

私の感じでは、Boostライブラリに入る多くの作業は、他のライブラリ/ STLで動作させることです。

その機能が必要ない場合は、_std::map<X*, Y*>_と_std::map<Y*, X*>_のクラスを使用できます。次に、次のようなメソッドを用意します:add(X,Y)remove(X,Y)get_left(X)、およびget_right(Y)

コピーを保存する場合は、add(X,Y)でメモリを割り当て、remove(X,Y)で割り当てを解除できます。また、残りの要素でremove(X,Y)を呼び出すデストラクタを定義することもできます。

11
Clinton

簡単な答え:いいえ。

長い答え:いいえ。


C++ 14透過コンパレータ のサポートにより、90%の時間でBoost.Bimapが不要になることに注意してください。*:オブジェクト(保存または計算)の任意のプロパティをキーオフする必要がある場合、とにかくオブジェクトに固有の/存在する単純でビット単位で比較可能な一意の識別子。透過コンパレータを使用すると、オブジェクトを変更せずにオブジェクトから取得/計算できる限り、オブジェクトをタイプによってのみ区別される任意の値と比較できます。

*統計ではなく、推測値

38
ildjarn