一开始我需要一张地图,所以我使用了std::map。
然后,添加了一些要求,我还需要获取“值”的“键”(bar 的 foos),所以我使用了
boost::bimaps::bimap<
boost::bimaps::unordered_set_of<boost::bimaps::tagged<std::string, foo>>,
boost::bimaps::multiset_of<boost::bimaps::tagged<std::string, bar>>>
在那之后,添加了一些更多的要求,所以现在我需要为每个 foo 存储一个数字,并且从右侧视图我需要能够调用<bimap>.righ.find(bar)
并获取成对的(foo + number stored for foo),但我仍然希望能够打电话<bimap>.left.find(foo)
和得到吧。
如何做到这一点?如果可能的话,我更喜欢一些现代 C++ 而不是 boost,但我想如果没有 boost,就很难拥有 bimap 功能。
编辑:我应该注意尺寸很重要,所以我不想存储任何涉及的部分两次,速度也很重要。
我应该有类似
"foo1"+100 <-> "bar1"
and
的东西"foo2"+300 <-> "bar4"
。
我希望能够调用<bimap>.left.find("foo1")
并获取“bar1”,
但也可以<bimap>.right.find("bar1")
获取pair(“foo1”,100)。