$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] newbie - graph library - vertex properties
From: Geoff Hilton (geoff.hilton_at_[hidden])
Date: 2009-12-15 19:37:55
Hi Suresh,
That's a good start, now try adding a second vertex and joining them 
together with the edge "e" of the sample code. Hint: add_edge. :)
The problem is caused by this bit here (notice the similarity):
 >  > Map::edge_descriptor e = *out_edges(v, map).first;
Geoff
List User wrote:
> Hi Tobias Columbus,
> 
> In fact I had tried that also. But then I got a funny message while 
> executing like this: Ubuntu 9.04, g++ 4.3.3
> //Map::vertex_descriptor v = *vertices(map).first;
>  Map::vertex_descriptor v = add_vertex(map);
> 
> suresh_at_suresh-laptop:~/C++$ ./a.out
> *** glibc detected *** ./a.out: free(): invalid pointer: 0x09f9c064 ***
> ======= Backtrace: =========
> /lib/tls/i686/cmov/libc.so.6[0xb7e6a604]
> /lib/tls/i686/cmov/libc.so.6(cfree+0x96)[0xb7e6c5b6]
> /usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb804d231]
> ./a.out[0x8049e7d]
> ./a.out[0x8049ea7]
> .
> .
> .
> 
> so what to do next?*
> suresh
> 
> *
> *
> *
> *
> ------------------------------------------------------------------------
> *From:* Tobias Columbus <t.columbus_at_[hidden]>
> *To:* boost-users_at_[hidden]
> *Sent:* Tue, December 15, 2009 3:45:42 AM
> *Subject:* Re: [Boost-users] newbie - graph library - vertex properties
> 
> Hi suresh,
> 
> Actually in the example you gave, there is no vertex in Map.
> Therefore vertices( map ).first is an iterator pointing to the end of
> vertices( map ) and accessing this element results in a segmentation
> violation.
> 
> You first need to add some vertices by
> 
> Map::vertex_descriptor v = add_vertex( map );
> 
> Then v is a vertex of your graph and you may assign properties to it:
> 
> map[v].name = "Troy";
> 
> Regards
> Tobias
> 
> On Tuesday 15 December 2009 08:36:46 am List User wrote:
>  > Hi,
>  >
>  > In order to understand bundled properties better, I tried to compile
> the example given in the link below. the code is pasted here: it gives
> a segmentation violation...
>  >
>  > using namespace std;
>  > using namespac e boost;
>  >
>  > struct City
>  > {
>  >  string name;
>  >  int population;
>  >  vector<int> zipcodes;
>  > };
>  >
>  > struct Highway
>  > {
>  >  string name;
>  >  double miles;
>  >  int speed_limit;
>  >  int lanes;
>  >  bool divided;
>  > };
>  >     
>  > typedef boost::adjacency_list< boost::listS, boost::vecS,
> boost::bidirectionalS,City, Highway> Map;
>  >
>  > int main(){
>  >     
>  > Map map; // load the map
>  > Map::vertex_descriptor v = *vertices(map).first;
>  > map[v].name = "Troy";
>  > map[v].population = 49170;
>  > map[v].zipcodes.push_back(12180);
>  > Map::edge_descriptor e = *out_edges(v, map).first;
>  > map[e].name = "I-87";
>  > map[e].miles = 10;
>  > map[e].speed_limit = 65;
>  > map[e].lanes = 4;
>  > map[e].divided = true;< br>> }
>  >
>  > How do I add memory for vertices in the above example?
>  >
>  > suresh
>  >
>  >
>  >
>  >
>  > That example uses bundled properties
> (http://www.boost.org/doc/libs/1_41_0/libs/graph/doc/bundles.html)
> which remove the need for the operations you named.
>  >
>  > >  3. In the kevin-bacon2.cpp approach for adding new properties to
> the graph, the vertex_properties are read as
>  > >    adjacency_list[vertex_descriptior]. How will have a read only
> access in such a case? When I use this in a function which is
>  > >    defined as const in c++, the compiler cribs :)
>  >
>  > A function defined as const, or taking the graph as const?  What error
> do you get?
>  >
>  > -- Jeremiah Willcock
>  > ___________________ ____________________________
>  > Boost-users mailing list
>  > Boost-users_at_[hidden] <mailto:Boost-users_at_[hidden]>
>>  http://listarchives.boost.org/mailman/listinfo.cgi/boost-users
>  >
>  >
>  >
>  >     
> 
> -- 
> __________________________
> Tobias Columbus
> t.columbus_at_[hidden] <mailto:t.columbus_at_[hidden]>