In my application I need to load millions of vertices into a graph.
I'm using BGL for this. Each edge has around 20-30 attributes
associated with it and each attribute has a unique ID (not necessarily
sequential or 0-based).
I'm currently using this multi_index_container for the attributes:
typedef detail::mutable_pair id_attribute_pair_type;
typedef boost::multi_index_container
<
id_attribute_pair_type,
boost::multi_index::indexed_by
< boost::multi_index::hashed_unique >
>
map_type;
which emulates:
typedef std::map map_type;
If I check memory consumption after loading the graph using
multi_index I'm at 190MB. Using std::map it's at 124MB. I realize
this is because std::map is perfectly sized and a hashmap will grow in
chunks, but is there a way I can reserve a size ahead of time since I
know exactly how many attributes there will be?
My graph loading performance does not seem to change between
multi_index and map, however subsequent search operations
(shortest_path, etc) seem to favor multi_index.
Thanks for such a great library. I've used it in many projects.
--Michael Fawcett