如何修复此边缘迭代器分配错误

How can I fix this edge iterator assignment error?

本文关键字:分配 错误 迭代器 边缘 何修复      更新时间:2023-10-16

我想遍历图形并删除边,计算连接组件的数量,然后将删除的边再次添加回图形。

我被困在应该将边缘迭代器分配给图形的第一个和最后一个边缘

的地方
edge_iter ei,ei_end,next;
    ei = edges(g).first;

它似乎甚至像这样不起作用:

tie(ei,ei_end) = edges(g);

我收到以下错误:

没有可行的重载"="

这是什么意思?

这是我目前的程序:

  using namespace boost;
  using namespace std;
    typedef adjacency_list <listS, vecS, undirectedS> Graph;
    typedef graph_traits < Graph >::edge_descriptor Edge;
    typedef std::pair<int,int> E;
    typedef graph_traits<Graph>::vertex_descriptor Vertex;
    typedef property_map<Graph, vertex_index_t>::type IndexMap;
    typedef std::pair<int,int> E;
    typedef graph_traits<Graph>::vertex_iterator vertex_iter;
    typedef graph_traits<Graph>::out_edge_iterator edge_iter;
    typedef property_map<Graph, vertex_index_t>::type VertexIndexMap;

  int main(int,char*[])
  {
   int num_nodes,num_edges;
   cin >> num_nodes >> num_edges;
   Graph g(num_nodes);
    for(int i = 0;i < num_edges; i++) // i/p edges into graph g
    {
        int e1,e2;
        cin >> e1 >> e2;
        Edge e;
        bool success;

        tie(e,success) = add_edge(e1-1, e2-1, g);
    }
    //graph entry completed

    edge_iter ei,ei_end,next;
    ei = edges(g).first;

你得到了带有edges(g)的图形边缘。但是,edge_iter被定义为 out_edge_iterator .

这些是不一样的(我认为对于所有具有out_edge集合的图形模型)。

所以,要么,

typedef graph_traits<Graph>::edge_iterator edge_iter;

graph_traits<Graph>::vertex_descriptor v;
ei = out_edges(v, g).first;

取决于你想要实现的目标,在功能上