>> My main issue is to use as few memory as possible, because there will
>> have a lot of paths in the set. Any idea?
>
> How many is a lot? Do you know the number before hand?

At least 1e7 paths. And the path size (i.e,
vector<edge_descriptor>.size()) is about 10 elements.

>
> If the order really doesn't matter and  you don't need the associative
> properties of a hash table, I'd stick with a list. for forward_list (for
> less memory, but no reverse iteration).

I do need the associative property. Basically, I will draw a lot of
paths and I'd like to know the number of *different* paths I've drawn.

That does seem like a fairly large number :) In that case unordered_map should work fine (it's basically the same as hash_map). you might want to pre-seed it with a large initial (prime) number of buckets to avoid a lot of rehashing.

You can use the Boost.Functional/Hash library to create a hash function for paths. That library has some support for computing combined hash keys. There may even be an overload for vector, but I'm not sure.

Andrew Sutton
andrew.n.sutton@gmail.com