Giriş
Şu satırı dahil ederiz.
Örnek 1
Elimizde iki farklı Graph tipi olsun.
Elimizde iki farklı Graph tipi olsun.
Functor kullanarak şöyle yaparız.
Ş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 2Elimizde 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 olsunstruct 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 3Functor 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