Я обязан использовать BOOST. Каким образом проще скопировать BOOST :: Graph в std :: vector?
Я хотел бы сделать что-то вроде этого:
1. Create std::vector<float> v
2. for every vertex in the boost::graph g
v.push_back(g.getDataofCurrentVertex());
Я прочитал эту ссылку, но все же, я не могу понять.
Я хотел бы видеть график как только контейнер.
Чтобы выполнить итерацию через DAG, вы можете использовать либо первый, либо первый шаг, последний, требующий временной очереди. Вы можете узнать больше об этих алгоритмах здесь и здесь.
Конечно, структура данных графа BOOST реализует для вас вершинный и краевой итератор... вы можете выполнять итерацию по всем вершинам с помощью функции verticies()
которую они упоминают в разделе "Доступ к набору вершин" ссылки, на которую вы указали к. Пример кода для простого обхода всех вершин находится в коде ниже:
int main(int,char*[])
{
// ...
// get the property map for vertex indices
typedef property_map<Graph, vertex_index_t>::type IndexMap;
IndexMap index = get(vertex_index, g);
std::cout << "vertices(g) = ";
typedef graph_traits<Graph>::vertex_iterator vertex_iter;
std::pair<vertex_iter, vertex_iter> vp;
for (vp = vertices(g); vp.first != vp.second; ++vp.first) {
//***replace this code with your vector::push_back() code ***
std::cout << index[*vp.first] << " ";
}
std::cout << std::endl;
// ...
return 0;
}
std::vector
в цикл for
чтобы получить все вершины в контейнер STL
v
как для вершины, так и для вектора.