有关两个独立键的
Relating two independent keys
假设我有两种类型的ID,entityID
和linkID
。
这些用于指代不同类型的对象,ID本身具有不同的(不可转换的(类型*。每个ID在其类型中都是唯一的。
每个CCD_ 3对应于存储在别处的CCD_。因此,我希望能够在另一个的基础上访问一个。要做到这一点,我希望能够从一种ID类型转换到另一种。
我通常将两种不同的类型与std::map<id, value>
相关联。然而,这限制了key
的搜索,因此只允许单向转换。
我能做的就是创建一个std::set<std::pair<entityID, linkID>>
。这确保了当用std::pair::first
搜索时从entityID
到linkID
的快速转换,当用std::find_if
用std::pair::second
搜索时有合理的时间。
同样,这似乎不是一个干净的解决方案,对阅读代码的人来说也不明显。据我所知,容器不可能按两个键排序,但我想知道是否有更方便的方法来存储这种关系。
*在重要的情况下,ID的类型是unsigned short
和struct{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
如果它不能解决你的问题,请告诉我。
- 我们能否在stm32f中使用硬件定时器控制两个独立的进程
- 将两个独立的stdin重定向为程序的输入
- 在没有额外代码的情况下链接两个独立类的最通用方法是什么?
- 同一范围内矢量的两个独立"for"循环,仅打印第一个循环
- 原子功能无锁可以更改两个独立的存储位置
- 打开文本文件并读取一个带有空格的字符串,然后将两个独立的int放入一个结构中
- 将两个独立的std::列表相互绑定
- 如何用公共文件区分两个独立程序的文件
- 如何将两个独立的boost::bind()组合为一个boost::函数
- c++中最快的从成对向量转换为两个独立向量的方法
- OpenGL:两个物体有两个独立的光源围绕它们旋转
- 两个独立的Qt应用程序可以使用相同的DLL文件吗?
- 如何将两个独立的c++文件合并到一个程序中
- 有关两个独立键的
- 将数组拆分为两个独立的数组
- 我如何使用SDL在两个独立的声卡上播放声音?
- 两个独立文件之间的c++友元函数声明
- 如何创建两个独立的对象,显示随机数10次
- 在C++中将一个数组中的两个独立值存储到单个数组索引中
- Visual studio c++问题用两个独立项目中的一个解决方案