3

私は現在、ブースト グラフ (adjacency_list) と、この構造のエッジまたは頂点を参照するいくつかのクラスの両方で構成されるアプリケーションを設計しています。

私の質問は: ノードまたは頂点への参照を維持するための推奨される方法は何ですか?

イテレータの場合、オブジェクトへのアクセスは高速ですが、イテレータはグラフ構造の動的な変更によって無効になる可能性があると思います。

反対に、記述子は ID です。つまり、データを取得するには検索が必要ですが、グラフが変更された場合にメモリ エラーが発生する可能性は低くなります。

本当ですか?

4

1 に答える 1

4

イテレータ/ディスクリプタの安定性とイテレータの効率は、どちらも頂点コンテナに依存します。

たとえばvectorS、頂点記述子はベクター内の頂点のインデックスにすぎないため、コンテナー内のルックアップは、ベクターにインデックスを付けるのと同じくらい高速です。記述子は、挿入と削除によって要素が移動する可能性があるため、このインスタンスの反復子と同じくらい不安定です。

I expect (read: 'guess') の場合listS、記述子は要素のアドレスであるため、記述子と反復子の両方が同じ安定性を保証する可能性があります。この場合、頂点記述子を使用してプロパティにアクセスすると、反復子と同じくらい効率的です。

adjacency_listイテレータ/ディスクリプタの安定性の詳細については、このページのイテレータおよびディスクリプタの安定性/無効化というタイトルのセクションを参照してください。パフォーマンス上の懸念がある場合は、比較するために 2 つのプロファイルを作成するのが最善であり、それがアプリケーションのボトルネックであると思われる場合にのみ行います。

于 2013-10-01T15:05:31.513 に答える