add_vertex - parametresiz
Elimizde şöyle bir graph olsun
Elimizde şöyle bir graph olsun
Örnek
Elimizde şöyle bir graph olsun.
Elimizde bir graph olsun
Aynı vertex'in iki kere eklenmediğini kontrol etmek için şöyle yaparız.
Elimizde şöyle bir graph olsun
typedef boost::adjacency_list<boost::setS, boost::setS, boost::undirectedS,
uint32_t, float> Graph;
Vertex tipini tanımlamak için şöyle yaparıztypedef Graph
::vertex_descriptor VertexType;
Vertex'leri eklemek için şöyle yaparız. Bu durumda her vertex'in property alanı atanmamış olurGraph g;
VertexType v_0 = boost::add_vertex (g);
VertexType v_1 = boost::add_vertex (g);
VertexType v_2 = boost::add_vertex (g);
VertexType v_3 = boost::add_vertex (g);
Vertex'leri eklemek için şöyle yaparız. Bu durumda her vertex'in property alanı atanmış olurVertexID v_0 = boost::add_vertex(0, g);
VertexID v_1 = boost::add_vertex(1, g);
VertexID v_2 = boost::add_vertex(2, g);
VertexID v_3 = boost::add_vertex(4, g);
add_vertex - vertex_prop ile vertex ismiElimizde şöyle bir graph olsun
typedef property<edge_name_t, char> edge_prop;
typedef property<vertex_name_t, char, property<vertex_index_t, int> > vertex_prop;
typedef adjacency_list<vecS, vecS, bidirectionalS, vertex_prop, edge_prop> Graph;
Vertex'leri eklemek için şöyle yaparız. Bu durumda vertex'lerin sadece char alanı atanmış, int alanı atanmamış olur.Graph g;
VertexType v_0 = add_vertex(vertex_prop('a'),g);
VertexType v_1 = add_vertex(vertex_prop('b'),g);
add_vertex - vertex structÖrnek
Elimizde şöyle bir graph olsun.
class VertexInfo
{
public:
VertexInfo(int i) : id(i) {}
int id;
};
typedef boost::adjacency_list< boost::setS,
boost::listS,
boost::bidirectionalS,
VertexInfo,
boost::no_property,
boost::no_property,
boost::listS
> Graph;
typedef boost::graph_traits<Graph>::vertex_descriptor VertexType;
Vertex'leri eklemek için şöyle yaparız.Vertex src = boost::add_vertex(VertexInfo(0), g);
Vertex tar1 = boost::add_vertex(VertexInfo(5), g);
Vertex tar2 = boost::add_vertex(VertexInfo(2), g);
Vertex tar3 = boost::add_vertex(VertexInfo(8), g);
ÖrnekElimizde bir graph olsun
struct VertexProperty {
int id;
};
typedef boost::adjacency_list<listS, vecS, undirectedS, VertexProperty> Graph;
stream'den okuyarak graph'a eklemek için şöyle yaparız.std::istringstream iss(line);
if (iss >> e1 >> e2) {
// find or insert v1 and v2, e.g. insert by:
auto v1 = add_vertex(VertexProperty { e1 }, g);
auto v2 = add_vertex(VertexProperty { e2 }, g);
add_edge(v1, v2, g);
}
ÖrnekAynı vertex'in iki kere eklenmediğini kontrol etmek için şöyle yaparız.
struct MyVertex {
std::string label;
int id;
auto key() const { return std::tie(id,label); }
bool operator< (const MyVertex &rhs) const { return key() < rhs.key(); }
bool operator==(const MyVertex &rhs) const { return key() == rhs.key(); }
bool operator!=(const MyVertex &rhs) const { return key() != rhs.key(); }
};
using graph_t=boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, MyVertex>;
graph_t graph;
auto node = [&graph](std::string name, int id) {
for (auto&& v : boost::make_iterator_range(vertices(graph)))
if (graph[v] == MyVertex{name, id})
eturn v;
return add_vertex({name, id}, graph);
};
auto v1 = node("Lorem", 123);
auto v2 = node("ipsum", 456);
auto v3 = node("Lorem", 123);
assert(v3==v1);
Hiç yorum yok:
Yorum Gönder