有关两个独立键的

Relating two independent keys

本文关键字:两个 独立      更新时间:2023-10-16

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

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

每个CCD_ 3对应于存储在别处的CCD_。因此,我希望能够在另一个的基础上访问一个。要做到这一点,我希望能够从一种ID类型转换到另一种。

我通常将两种不同的类型与std::map<id, value>相关联。然而,这限制了key的搜索,因此只允许单向转换。

我能做的就是创建一个std::set<std::pair<entityID, linkID>>。这确保了当用std::pair::first搜索时从entityIDlinkID的快速转换,当用std::find_ifstd::pair::second搜索时有合理的时间。

同样,这似乎不是一个干净的解决方案,对阅读代码的人来说也不明显。据我所知,容器不可能按两个键排序,但我想知道是否有更方便的方法来存储这种关系。


*在重要的情况下,ID的类型是unsigned shortstruct{unsigned int, unsigned short}


编辑sharth在评论中提到的增强::bimap正是我想要的。

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

有三种解决方案:

1( 使用两个映射,一个以entityID为键,另一个以linkID为键。

2( 使用类似Boost多索引库的多键映射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

如果它不能解决你的问题,请告诉我。