31

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

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

ありがとう!

更新: The 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 つの mirrorred マップは同じように問題ないため、1 つのヘッダー/ソース ファイルまたは少し追加します)。

4

2 に答える 2

33

簡単な答え:いいえ。

長い答え:いいえ。


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

*統計ではなく、推測

于 2011-04-13T09:56:46.560 に答える
14

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

その機能が必要ない場合は、std::map<X*, Y*>andを含むクラスを使用できます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)また、残りの要素を呼び出すデストラクタを定義することもできます。

于 2011-04-14T01:04:40.837 に答える