boost bimap with second type as a list, flattening right map view

185 Views Asked by At

I recently saw that boost has a bidirectional map implementation named bimap.

My initial STL map was using the following 2 types:

  • int as the key type
  • std::weak_ptr<void> as the value type (let's call it X)

Scenario 1

To create a bimap with these types, the declaration would be something like

boost::bimap<int, boost::bimaps::set_of<X, std::owner_less<X>>>

since std::weak_ptr needs an less operator (provided by std::owner_less) and is linked to the type with boost::bimaps::set_of to be usable(If I understood correctly).

Scenario 2

I want my int type key from the map to point to multiple values of type X.

For a standard map, changing the value type from X to std::list<X> would be ok as in: std::map<int, std::list<X>>

How could the bidirectional map be defined (or what can be used) so that right map view would be interpreted as a map<X,int> (flattening the lists of X), while the right one still being a map<int,list<X>>?

0

There are 0 best solutions below