My program contains a dynamic graph, and edges of various kinds are added and removed over the lifecycle of the program. I would like to be able to include edge attributes in the same call as
add_edges. I can see that this is possible from the documentation, however I can’t quite figure out how to do this. Of course, can add the attribute in after adding the edges, but I think it would streamline things considerable to do all at once
Could someone point me to an example or to the appropriate documentation?
The documentation is indeed quite sparse on using attributes. A partial rework of attribute handling is one of the big ticket items for version 0.11, though the work hasn’t started yet. The docs should be improved at the same time.
For now I recommend that you look at some of the import/export functions for usage examples, for example
igraph_read_graph_gml(). While it’s not the simplest reader, here you can follow the relevant part of the code without having to look into Bison source files. igraph/gml.c at master · igraph/igraph · GitHub
attr must be a pointer to an
igraph_vector_ptr_t, where each entry points to an attribute record.
- Attribute records are represented as
igraph_attribute_record_t, with the following fields:
name is a null-terminated string, the attribute name
type should be one of
value will be a pointer to corresponding igraph vector type, i.e.
igraph_strvector_t. It must have an appropriate length, matching the number of vertices for vertex attribute, the number of edges for edge attributes, or 1 for graph attributes.
- All the data passed in through
attr will be copied. In other words, its ownership does not change. You still own the data and you are responsible for freeing it after the
Thank you - this is extremely helpful! I will try to implement this later today, and will write back with any questions. I appreciate your time.