Я создаю собственный график повышения с моими собственными свойствами узла и ребер. Я определил график следующим образом:
class NavGraph : public boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS, NodeInfo, EdgeInfo > {
public:
typedef boost::graph_traits<NavGraph>::vertex_descriptor Vertex;
typedef boost::graph_traits<NavGraph>::edge_descriptor Edge;
NavGraph(){}
void init(const std::vector<NodeInfo>& nodes, const std::vector<EdgeInfo>& edges);
}
Сейчас я пытаюсь инициализировать этот граф из списка свойств узлов и ребер (в методе init). NodeInfo и EdgeInfo — это простые структуры с примитивными типами. До сих пор я сделал это:
void NavGraph::init(const std::vector<NodeInfo>& nodes, const std::vector<EdgeInfo>& edges){
//Add the Vertices
for (std::vector<NodeInfo>::const_iterator it = nodes.begin() ; it != nodes.end(); ++it){
Vertex u = boost::add_vertex(*this);
(*this)[u].nodeIndex = (*it).nodeIndex;
(*this)[u].x = (*it).x;
(*this)[u].y = (*it).y;
(*this)[u].z = (*it).z;
}
//Add the edges
for (std::vector<EdgeInfo>::const_iterator it = edges.begin() ; it != edges.end(); ++it){
//To be implemented
}
}
Итак, мне удалось добавить вершины и установить свойства (надеюсь, это правильно). Теперь каждый EdgeInfo имеет идентификатор источника и цели, которые идентифицируют два узла ребра. Проблема в том, что мне нужно получить их по Id из графа (со свойством nodeIndex, которое я установил ранее), чтобы я мог вызвать метод add_edge. Я действительно не знаю, как это сделать. Надеюсь, вы, ребята, можете мне помочь.