Is there a usable alternative to Boost’s bimap in C++0x?
I would like to avoid Boost, but fully embrace C++11. If necessary, a slimmed down version of Boost’s bimap would work for me (I need a constant bimap to switch between enums and corresponding strings) throughout my program. The map will be compile-time constant, so perhaps even two manually maintained maps aren’t the optimal solution.
UPDATE: I found this on The Code Project, but it seems licensing may be an issue: http://www.codeproject.com/KB/stl/bimap.aspx?fid=12042&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=151#xx0xx
I’m just looking for a clean and easy solution (one header/source file or little extra, as two mirrorred maps are equally fine in my case).
My feeling is a lot of the work that goes into Boost libraries is making them work with other libraries/STL.
If you don’t need that capability, you could just use a class with a
std::map<X*, Y*>andstd::map<Y*, X*>. Then have methods like the following:add(X,Y),remove(X,Y),get_left(X)andget_right(Y).If you want to store copies,
add(X,Y)could allocate memory, andremove(X,Y)can de-allocate. Also, you can then define a destructor that callsremove(X,Y)on the remainder of the elements.