关联两个独立的键

时间:2014-07-01 00:56:13

标签: c++ map stl

假设我有两种类型的ID,entityIDlinkID

这些用于指代不同类型的对象,ID本身具有不同(不可转换)类型*。每个ID在其类型中都是唯一的。

每个Entity对应于存储在其他地方的Link。因此,我希望能够基于另一个访问一个。为此,我希望能够从一种ID类型转换为另一种ID类型。

我通常如何关联两个不同类型,例如std::map<id, value>。但是,这限制了key的搜索,因此只允许单向转换。

我能做的是创建一个std::set<std::pair<entityID, linkID>>。这样可确保在entityID搜索时从linkID快速转换为std::pair::first,并在std::pair::second使用std::find_if进行搜索时有合理的时间。

同样,这似乎不是一个干净的解决方案,对于阅读代码的任何人来说都不是显而易见的。虽然,据我所知,将容器按两个键分类是不可能的,但我想知道是否有一种更方便的方式来存储这种关系。


*如果重要,则ID的类型为unsigned shortstruct{unsigned int, unsigned short}


修改 <{3}}在评论中提到的boost::bimap就是我所寻找的。

1 个答案:

答案 0 :(得分:1)

如果我清楚地理解了您的要求,那么您希望拥有一对entityID和linkID。除此之外,您还希望有一些基于entityID和linkID的快速搜索算法。

有3个解决方案:

1)使用2个地图,其中一个以entityID作为密钥,另一个以linkID作为密钥。

2)使用多键映射,例如来自Boost Multi-Index库http://www.boost.org/doc/libs/1_46_1/libs/multi_index/doc/index.html

的映射

3)使用Boost :: Bimap代表双向地图。 http://www.boost.org/doc/libs/1_55_0/libs/bimap/doc/html/index.html

如果它无法解决您的问题,请告诉我。