On Apr 29, 2010, at 6:54 PM, Jeremiah Willcock wrote:
You wouldn't be ordering your properties themselves (or pointers to them), just the vertex indices. Those are usually integers and so are easy to compare. Or am I misunderstanding what you're keeping maps of?
The vertex descriptors are the map values, not the map keys. The keys are the properties themselves. (I don't see how it would work otherwise.) It's just like the kevin-bacon example: typedef adjacency_list < vecS, vecS, undirectedS, property < vertex_name_t, std::string >, property < edge_name_t, std::string > > Graph; ... typedef graph_traits < Graph >::vertex_descriptor Vertex; typedef std::map < std::string, Vertex > NameVertexMap; NameVertexMap actors; But I just realized I'm actually still using Foo pointers for my vertex map's keys. Despite switching to shared_ptr for the vertex property, the map's functionality doesn't change, due to the way I'm modeling the data. So there's no need for me to use shared_ptr<BaseVertex> as the key. In other words, as long as the efficiency of std::map is as good with pointers as it is with integers, I've got no worries.
Look at dynamic_pointer_cast<FooVertex>(vertex).
Seems to work perfectly; thanks! Trevor