7 Kasım 2016 Pazartesi

graph copy_graph metodu

Giriş
Şu satırı dahil ederiz.
#include <boost/graph/copy.hpp>
Aynı özelliklere sahip ancak vectorS , setS gibi farklı tipler kullanan Graph nesnelerini kopyalamak için kullanılır.

Örnek 1
Elimizde iki farklı Graph tipi olsun.
typedef boost::adjacency_list<boost::setS, boost::setS, boost::undirectedS, 
  uint32_t, float> Graph1;
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, 
  uint32_t, float> Graph2;
Elimizde iki graph nesnesi olsun.
Graph1 g1;
...
Graph2 g2;
Şöyle yaparız.
std::map<Graph1::vertex_descriptor, int> index;
for (auto v : boost::make_iterator_range(boost::vertices(g1))) {
  index.insert(std::make_pair(v, index.size()));
}

Graph2 g2;
boost::copy_graph(g1, g2,
  boost::vertex_index_map(boost::make_assoc_property_map(index)));
Örnek 2
Elimizde iki farklı Graph tipi olsun.
typedef boost::adjacency_list<boost::vecS,boost::vecS,boost::undirectedS,
  uint32_t,float> Graph1;

typedef AdjacencyList::vertex_descriptor VertexID;

struct custom_property
{
  ...  
};

typedef boost::adjacency_list<boost::vecS,boost::vecS,boost::undirectedS,
  custom_property,float> Graph2;
custom_property kopyalanacek şekilde şöyle olsun
struct custom_property {
  custom_property(uint32_t label = 0, float f = 0) : label(label), f(f) {}
  uint32_t label;
  float f;
};
Şöyle yaparız.
boost::copy_graph(g1,g2);
Örnek 3
Functor kullanarak şöyle yaparız.
struct vertex_copier {
  Graph1& from;
  Graph2& to;

  void operator()(Graph1::vertex_descriptor input, 
                  Graph2::vertex_descriptor output) const {
    to[output] = { from[input], 0.f };
  }
};
Şöyle yaparız.
boost::copy_graph(g1, g2, boost::vertex_copy(vertex_copier{g1, g2}));

Hiç yorum yok:

Yorum Gönder