$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Alexey Nikitin (reductor_at_[hidden])
Date: 2003-09-26 04:16:45
> Two options come to mind:
> 1) Add an internal edge_index property to your edges, and use an
> std::map<std::Size_t, edge_descriptor>, or
Thanks, this is work.
> 2) Just make your map into an edge property. That'll give you O(1)
> access instead of O(lg n) access.
This method looks very prettily, but next code not compiled:
#define _DEBUG
#include <cassert>
#include <utility>
#include <boost/graph/adjacency_list.hpp>
using namespace boost;
using namespace std;
struct EDescr;
struct edge_descr_t { typedef edge_property_tag kind; };
typedef property<edge_descr_t, EDescr> EDescrProp;
typedef adjacency_list<vecS, vecS, directedS, no_property, EDescrProp>
Graph;
typedef graph_traits<Graph>::edge_descriptor EdgeDescr;
struct EDescr
{
EDescr() {};
EDescr(EdgeDescr e) : edge(e) {}
operator EdgeDescr() const { return edge; }
operator EdgeDescr&() { return edge; }
EdgeDescr edge;
};
int main()
{
Graph g(8);
pair<EdgeDescr,bool> e0 = add_edge(0, 1, g);
assert(e0.second);
pair<EdgeDescr,bool> e1 = add_edge(1, 2, g);
assert(e1.second);
put(edge_descr_t(), g, e0.first, e1.first);
put(edge_descr_t(), g, e1.first, e0.first);
}
with error
... boost\pending\property.hpp(24) : error C2079:
'boost::property<Tag,T>::m_value' uses undefined struct 'EDescr'
with
[
Tag=edge_descr_t,
T=EDescr
]
and many other. I'm use MSVC 7.1.
Can you help my correct this example?
Thanks, Alexey.