簡體   English   中英

從boost :: adjacency_list圖中刪除多個頂點

[英]Removing multiple vertices from a boost::adjacency_list graph

我正在使用boost graph_traits並定義了這樣的圖形:

typedef boost::adjacency_list <boost::setS, boost::vecS, boost::undirectedS, NodeInfo, EdgeInfo> Graph;
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;

我的每個頂點都有坐標,我打算找到重復的頂點(同一位置的頂點)。 所以我構建了一個包含這些“集群”的列表:

std::vector<std::vector<Vertex>> clusters;

現在我嘗試將每個聚類合並到一個頂點(頂點列表)中。 為此,我調用集群clusters[i]每個頂點:

boost::clear_vertex(v, graph)
boost::remove_vertex(v, graph);

但是我注意到仍然存在重復。 我猜這與刪除時索引的變化有關,因為我使用vecS作為頂點列表。

這是什么原因,我該如何解決?

對於vectorS ,描述符和迭代器一樣不穩定:它們在插入/移除時失效。 請參閱迭代器和描述符穩定性/無效

當然,那里描述的解決方案(使用listS )可能不適用於您的情況。

在這種情況下,重新考慮您的問題,並考慮過濾圖形(不實際刪除頂點)或將頂點標記為已刪除。 看到這里尋找靈感:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM