4

(タイトルをお詫びします。140文字より短い良いものを思い付くことができませんでした...)

boost::graphライブラリのグラフアルゴリズムを書いています。私のアルゴリズム内では、ノードに関する変数、重み、およびカウンターを保持する必要があります。これを行う一般的な方法は、ドキュメントや他の人のコードからわかる限り、これらのプロパティをグラフに直接添付し、プロパティマップを使用してアクセスすることです。

ただし、ライブラリ関数では、特定の読み取り/書き込みマップをグラフにバンドルする必要がないため、独自の外部プロパティマップを作成します。しかし、これらにはstd::map(または同等の)が必要なので、astd::mapとaの両方を作成することになりboost::associative_property_map<std::map>ます。これの良いところは、アルゴリズムのプロパティとユーザーのプロパティ(boost::get)の両方を取得する方法が統一されていることですが、欠点として、2つの冗長なマップがあるようです。言及された均一性以外にこれを行うことに意味はありますか?どういうわけか、プロパティマップに独自の内部マップを維持させることはできますか(メモリなどにゲインがないことはわかりますが、プロパティごとに追跡するメンバー変数が1つ少なくなります)。

4

1 に答える 1

5

簡単に言うと、を使用してマップmと結合プロパティマップpmを作成mすると、冗長性が生成されなくなります。詳細については、以下をご覧ください。

boost::associative_property_map新しいマップは作成されません。別のマップのみを参照し、boost property_map API(get&put)を介してアクセスできるようにします。

ここに文書化された例を参照してください。

associative_property_mapのコンストラクターを見てみると、コンテナーへの参照を受け取り、そのアドレスをポインター(m_c)として格納していることがわかります。ここを見て、ファイルで「associative_property_map」を検索してください。

于 2011-08-16T19:49:42.610 に答える