[BGL] Is it a bug when using random access EdgeList?

I wrote a very simple sample using BGL adjacent list and using a random access EdgeList. But when I invoke remove_out_edge method, It seems wrong. My config is Boost 1.33.1 and Visual Studio 2005, here is my code: ------------x-------------------------------Begin here-----------------------------------------x------------- #include <boost/graph/adjacency_list.hpp> #include <string> using namespace boost; using namespace std; namespace boost{ struct vertex_label_t { typedef vertex_property_tag kind; }; } template <class EdgeIter, class Graph> void print_graph(EdgeIter first, EdgeIter last, const Graph& G) { typedef typename property_map<Graph, vertex_label_t>::const_type LabelMap; LabelMap label = get(vertex_label_t(), G); typedef typename boost::property_traits<LabelMap>::value_type LabelType; LabelType src_label, targ_label; while (first != last) { src_label = boost::get(label, source(*first, G)); targ_label = boost::get(label, target(*first, G)); cout << src_label << " <-> " << targ_label << endl; ++first; } } typedef property<vertex_label_t, std::string> LabelProperty; typedef adjacency_list<vecS, vecS, undirectedS, LabelProperty, boost::no_property, boost::no_property, vecS> MyGraphType; bool AnyEdge(MyGraphType::edge_descriptor e) { return true; } int main() { typedef pair<int,int> Pair; Pair edge_array[8] = { Pair(0,1), Pair(0,2), Pair(0,3), Pair(0,4), Pair(2,4), Pair(3,1), Pair(3,4), Pair(4,1) }; MyGraphType G(5); for (int i = 0; i < 8; ++i) add_edge(edge_array[i].first, edge_array[i].second, G); property_map<MyGraphType, vertex_label_t>::type name = get(vertex_label_t(), G); boost::put(name, 0, "0"); boost::put(name, 1, "1"); boost::put(name, 2, "2"); boost::put(name, 3, "3"); boost::put(name, 4, "4"); print_graph(edges(G).first, edges(G).second, G); // Remove out edges of vertex 0 cout << "Remove out edges of vertex 0" << endl; remove_out_edge_if(0, AnyEdge, G); print_graph(edges(G).first, edges(G).second, G); } ------------x-------------------------------End here-----------------------------------------x------------- and the result is: ------------------------------------------------------------------------------------------------------------------ 0 <-> 1 0 <-> 2 0 <-> 3 0 <-> 4 2 <-> 4 3 <-> 1 3 <-> 4 4 <-> 1 Remove out edges of vertex 0 0 <-> 2 0 <-> 4 3 <-> 1 4 <-> 1 ------------------------------------------------------------------------------------------------------------------ Is there something wrong? --------------------------------- Brings words and photos together (easily) with PhotoMail - it's free and works with Yahoo! Mail.

On Feb 7, 2006, at 11:01 PM, Tux Han wrote:
I wrote a very simple sample using BGL adjacent list and using a random access EdgeList. But when I invoke remove_out_edge method, It seems wrong. My config is Boost 1.33.1 and Visual Studio 2005, here is my code: [snip] Is there something wrong?
This is definitely a bug in the BGL. In truth, the EdgeListS parameter should always be "listS", because there are problems with almost all other container types :( Doug
participants (2)
-
Doug Gregor
-
Tux Han