У меня есть вектор вершины с координатами id, x & y, я хочу сгенерировать граф степенного закона для моих вершин. Граф библиотеки Boost предоставляет power lawpiterator(), но как я могу сгенерировать это с моими вершинами. любой может помочь?
В документации Boost указано, что это генераторы.
"Этот шаблон класса реализует генератор для графиков без масштаба, используя алгоритм" Закон законности (PLOD) "(http://www.boost.org/doc/libs/1_55_0/libs/graph/doc/plod_generator.html)
Это немного запутанно, что он говорит итератор.
Вместо этого я создавал бы вектор структур с вашими данными, а затем генерировал граф степенного закона с тем же числом узлов.
Модифицировано из дополнительной документации:
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/plod_generator.hpp>
#include <boost/random/linear_congruential.hpp>
struct VertData{
size_t id;
size_t x;
size_t y;
};
typedef boost::adjacency_list<> Graph;
typedef boost::plod_iterator<boost::minstd_rand, Graph> SFGen;
int main()
{
vector<VertData> vertData;
//... Initialize with data ...
boost::minstd_rand gen;
// Create graph with 100 nodes
Graph g(SFGen(gen, 100, 2.5, 1000), SFGen(), 100);
typedef property_map<Graph, vertex_index_t >::type VertexIndexMap;
VertexIndexMap iMap = get(vertex_index,g);
// ... get some vertex v
size_t vertexIndex = iMap[v];
//...
vertexData.at(vertexIndex).x = 4;//or what ever
return 0;
}
Здесь будет установлен масштабный граф с 100 узлами с степенной степенью степени 2,5.
Затем, когда вы хотите получить доступ к данным узла, просто получите доступ к его индексу и просмотрите свой вектор структуры. Вы можете получить индекс следующим образом:
typedef property_map<Graph, vertex_index_t >::type VertexIndexMap;
VertexIndexMap iMap = get(vertex_index,g);
size_t vertexIndex = iMap[v];
...
vertexData.at(vertexIndex).x = 4;//or what ever
Это может быть не самым лучшим способом, но это позволило мне выполнить мою работу.