说我有两种类型的ID,entityID
和linkID
。关联两个独立密钥
这些用于引用不同类型的对象,并且ID本身具有不同(不可转换)类型*。每个ID在其类型中都是唯一的。
每个Entity
对应于存储在别处的Link
。因此,我希望能够访问另一个基于另一个。要做到这一点,我希望能够从一个ID类型转换到另一个。
我通常会将两种不同类型关联起来,例如std::map<id, value>
。但是,这限制了搜索到key
,因此只允许单向转换。
我可以做的是创建一个std::set<std::pair<entityID, linkID>>
。这确保了当通过std::pair::first
进行搜索时,从entityID
到linkID
的快速转换,以及通过std::pair::second
使用std::find_if
进行搜索时具有合理的时间。
同样,这似乎并不是一个干净的解决方案,对于任何阅读代码的人都不明显。虽然,据我了解,这是不可能有一个容器按两个键排序,我想知道是否有一个更方便的方式来存储这种关系。
*如果它的事项,该类型的ID是unsigned short
和struct{unsigned int, unsigned short}
。
编辑 在评论中提到通过sharth的boost::bimap就是我一直在寻找。
['boost :: bimap'](http://www.boost.org/doc/libs/1_55_0/libs/bimap/doc/html/index.html)是一个很好的解决方案。 –
@sharth的确如此,我正在寻找。不过,我的词汇无法产生合适的谷歌搜索。 ;) – nwn