14 Aralık 2016 Çarşamba

property_map property_map Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/property_map/property_map.hpp>
property_map sınıfı default consructor'a sahip değil. Bir graph'ın verdiği get metodu ile elde edilir. property_map bir iterator ile beraber çalışır. Verilen iterator'ün property alanını döndürür.

compressed_sparse_row_graph sınıfının verdiği get metodunun imzası şöyle
// Property map accessors
template<typename PropertyTag>
property_map<compressed_sparse_row_graph, PropertyTag>::type
get(PropertyTag, compressed_sparse_row_graph& g)
Tanımlama - Graph + vertex veya edge property
typedef ile yapılır. Şöyle yaparız.
typedef boost::compressed_sparse_row_graph<boost::bidirectionalS,
  boost::no_property, boost::property<boost::edge_weight_t, int> > Graph;
typedef typename boost::property_map<Graph, boost::edge_weight_t>::type WeightMap;
edge_weight_t
Elimizde şöyle bir graph olsun
typedef boost::adjacency_list<...,...,...,...,boost::edge_weight_t> GraphType;
Elimizde şöyle bir graph olsun
typedef boost::adjacency_list<...,..., ...,...,
  boost::property<boost::edge_weight_t, float> > GraphType;
Her ikisi için de şöyle yaparız.
typedef boost::property_map<GraphType,  boost::edge_weight_t>::type EdgeWeightMap;
Dolaşmak için şöyle yaparız.
EdgeWeightMAp edgeWeightMap = get(boost::edge_weight_t(), g);

using edge_iter = boost::graph_traits<GraphType>::edge_iterator;
std::pair<edge_iter, edge_iter> edgePair;
for(edgePair = edges(g); edgePair.first != edgePair.second; ++edgePair.first) {
  std::cout << edgeWeightMap[*edgePair.first] << " ";
}
vertex_index_t
Elimizde şöyle bir graph olsun
typedef boost::adjacency_list<...,...,...,boost::vertex_index_t,...> GraphType;
Şöyle yaparız.
typedef boost::property_map<GraphType,  boost::vertex_index_t>::type 
VertexIndexMap;

Hiç yorum yok:

Yorum Gönder