c++ - How to modify properties while proceeding BFS in Boost Graph Library? -


i'm using bundled property graph. definitions follows:

class node {     void assignplane(plane& p)     plane* dp;     double errors; }  void node::assignplane(plane& p) {     dp=&p;     errors=p.a+p.b+p.c;// simplified }  typedef adjacency_list<vecs,vecs,bidirectionals,node,float> ngraph;  //...  struct nvisitor: default_bfs_visitor {     void discover_vertex(vertexdesc u, const ngraph& g) const     {         // can't modify g     } } 

but can't call g[u].assignplane(p) modify vertex, nor can pointer vertex, both vital me.
though question may seem stupid, novice of boost, , have fought 2 weeks adapt convoluted style of boost codes, need help.
not try answer "you need use other bgl", please, can find nothing support work other bgl.
, must say, official documentation not intended explain great work in simpler way. since have read documentation dozens of times, not suggest me reread documentation.
appreciate useful help, , thank in advance.

you make fields mutable

class node {     void assignplane(plane& p) const;     plane* mutable dp;     double mutable errors; }  void node::assignplane(plane& p) const {     dp=&p;     errors=p.a+p.b+p.c;// simplified } 

otherwise, consider holding non-const "reference" graph inside visitor:

struct nvisitor: default_bfs_visitor {     ngraph* gref_;     nvisitor(ngraph& g) : gref_(&g) {}      void discover_vertex(vertexdesc u, const ngraph& g) const     {         plane* p = /*get somewhere*/;         (*gref_)[u].assignplane(p);     } } 

be careful not break invariants bfs (like, don't edit edges while traversing).


Comments

Popular posts from this blog

java - Date formats difference between yyyy-MM-dd'T'HH:mm:ss and yyyy-MM-dd'T'HH:mm:ssXXX -

c# - Get rid of xmlns attribute when adding node to existing xml -