gpt4 book ai didi

c++ - 关联两个独立的键

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:45 25 4
gpt4 key购买 nike

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

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

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

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

我能做的是创建一个 std::set<std::pair<entityID, linkID>> .这确保了从 entityID 的快速转换至 linkIDstd::pair::first 搜索时, 按 std::pair::second 搜索时有合理的时间使用 std::find_if .

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


*如果重要的话,ID 的类型是 unsigned short和一个 struct{unsigned int, unsigned short} .


编辑boost::bimapsharth所述评论中正是我要找的内容。

最佳答案

如果我理解清楚了你的需求,那么你想要一对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

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

关于c++ - 关联两个独立的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com