Я работаю над огромным и статичным графиком, а затем считаю, что boost ::ressed_sparse_row_graph вполне соответствует моим требованиям. Я пытаюсь запустить граф с некоторым кодом ниже;
typedef uint32_t vertex_id;
typedef uint32_t edge_id;
struct MyVertex{
vertex_id id;
// and other attributions
}
struct MyEdge{
edge_id id;
//and other attributions
}
// graph define
typedef boost::compressed_sparse_row_graph<
boost::bidirectionalS,
MyVertex,
MyEdge,
boost::no_property,
vertex_id,
edge_id
> graph_t
std::vector<MyVertex> vertex_vector;
std::vector<MyEdge> edge_vector;
//this is the graph connection vertex_id->edge_id->vertex_id
std::unordered_map<vertex_id, std::unordered_map<vertex_id, edge_id>> out_adj;
// init above from file ...
graph_t my_graph;
//add vertex
for (uint32_t i = 0; i < vertex_vector.size(); ++i) {
vertex_id this_vertex_id = boost::add_vertex(my_graph, vertex_vector[i]);
assert(i==this_vertex_id);
}
Но я застрял с boost :: add_edges, а документ boost неясен. Как я могу добавить ребро с определенным индексом? Кто-нибудь может дать эффективный код инициализации? И как я могу получить доступ к вершине / ребру по индексу после инициализации.