Graph - return edge_descriptor
Can anybody tell my why the find_edge function in the code below fails to
get a property if I return the first edge in the list.
This is what happens -
Find_edge looks for edge A - B
It winds it and prints out the edge descriptor, and the weight of the edge
It the returns the edge
The main code prints out the edge descriptor and the fails when trying to
print the weight.
BTW - Is there a ready made function to find an edge based on the vertices ?
#include
Hi Richard, On Thu, 22 Aug 2002, Shaw, Richard A wrote: richar> Can anybody tell my why the find_edge function in the code below richar> fails to get a property if I return the first edge in the list. I just ran your example with g++ 2.95.2 on solaris, but I could not reproduce the problem (BTW, was the problem a seg fault?). What compiler/OS are you using? richar> BTW - Is there a ready made function to find an edge based on the vertices ? Yes, it is the "edge" function. Cheers, Jeremy ---------------------------------------------------------------------- Jeremy Siek http://php.indiana.edu/~jsiek/ Ph.D. Student, Indiana Univ. B'ton email: jsiek@osl.iu.edu C++ Booster (http://www.boost.org) office phone: (812) 855-3608 ----------------------------------------------------------------------
On Thu, 2002-08-22 at 10:19, Shaw, Richard A wrote:
Can anybody tell my why the find_edge function in the code below fails to get a property if I return the first edge in the list.
This is what happens -
Find_edge looks for edge A - B It winds it and prints out the edge descriptor, and the weight of the edge It the returns the edge The main code prints out the edge descriptor and the fails when trying to print the weight.
BTW - Is there a ready made function to find an edge based on the vertices ?
#include
#include <iostream> #include <fstream> #include
#include #include using namespace boost;
// Find edge template <class Graph> std::pair
find_edge(graph_traits<Graph>::vertex_descriptor u, graph_traits<Graph>::vertex_descriptor v, Graph g)
It's a lot more efficient to pass a const reference to the graph you're searching in. As Jeremy though, I cannot reproduce your problem using gcc 3.1 and either of boost 1.2.8 or the latest CVS source tree. Regards, Tarjei
On Thu, 2002-08-22 at 10:19, Shaw, Richard A wrote:
Can anybody tell my why the find_edge function in the code below fails to get a property if I return the first edge in the list.
This is what happens -
Find_edge looks for edge A - B It winds it and prints out the edge descriptor, and the weight of
It the returns the edge The main code prints out the edge descriptor and the fails when
I did mean to mention the compiler etc. It is -
gcc version 2.95.3-5 (cygwin special)
and boost 1.28
I did think after reading the graph introductin that the edge()
function may do what I wanted but I couldn't find any other mention
of it. Just discovered the adjacency_list_io classes after I'd spend
the time writing my own (low tech ones).
I'll try using edge instead and see what happens
Thanks - it's great to get such a quick response.
--- In Boost-Users@y..., Tarjei Knapstad
print the weight.
BTW - Is there a ready made function to find an edge based on the vertices ?
#include
#include <iostream> #include <fstream> #include
#include #include using namespace boost;
// Find edge template <class Graph> std::pair
find_edge(graph_traits<Graph>::vertex_descriptor u, graph_traits<Graph>::vertex_descriptor v, Graph g) It's a lot more efficient to pass a const reference to the graph you're searching in.
As Jeremy though, I cannot reproduce your problem using gcc 3.1 and either of boost 1.2.8 or the latest CVS source tree.
Regards, Tarjei
On Thu, 2002-08-22 at 10:19, Shaw, Richard A wrote:
Can anybody tell my why the find_edge function in the code below fails to get a property if I return the first edge in the list.
This is what happens -
Find_edge looks for edge A - B It winds it and prints out the edge descriptor, and the weight of
It the returns the edge The main code prints out the edge descriptor and the fails when
In my last mail I didn't say how it failed.
It gets a bad address for the property - so for the weight it
displays a large meaningless number, for a string property it prints
pages of garbage - I was surprised how few zeros were in memory !
I had a look at the implementation of edge() and I see that it
returns the following -
edge_descriptor(u, v, &(*i).get_property()
my code just returns the contents of the out_edge_iterator
I changed my function to return -
return std::make_pair(true,
graph_traits<Graph>::edge_descriptor(u, v,
(*ei).get_property()));
but it made no difference.
I tried using edge() and it works OK.
Strange.
--- In Boost-Users@y..., Tarjei Knapstad
print the weight.
BTW - Is there a ready made function to find an edge based on the vertices ?
#include
#include <iostream> #include <fstream> #include
#include #include using namespace boost;
// Find edge template <class Graph> std::pair
find_edge(graph_traits<Graph>::vertex_descriptor u, graph_traits<Graph>::vertex_descriptor v, Graph g) It's a lot more efficient to pass a const reference to the graph you're searching in.
As Jeremy though, I cannot reproduce your problem using gcc 3.1 and either of boost 1.2.8 or the latest CVS source tree.
Regards, Tarjei
participants (4)
-
Jeremy Siek
-
richardshaw11
-
Shaw, Richard A
-
Tarjei Knapstad