在我的C++应用程序中,我遇到了一个问题,我需要关联3个内容并查找它们或迭代任何一个列.
假设我有3个类A,B,C,A可以是B/C对的两个或三个组合.我希望能够找到所有与B相关的As,每个A的所有BC对,或给定A和C的每个B.
除了有一个std :: tuple的向量并且在整个列表上线性迭代之外,这对我来说并不明显,但我更喜欢使用类似哈希表的访问.我想到的另一种方法是简单地使多个哈希表A -> vector<pair<B,C>>,B -> vector<pair<A,C>之后,这样的事情,但它似乎是一个头痛的维护.
我之前已经编写过代码来解决可能类似的问题,并且我这样做了,效果还不错(到目前为止)。
在某些班级:
您可以存储 a vectorof tuples,例如:
vector<tuple<A, B, C>> tuple_array;
Run Code Online (Sandbox Code Playgroud)
哈希访问的映射仅指向元组索引,例如:
map<A, size_t> a_mapping;
map<B, size_t> b_mapping;
map<C, size_t> c_mapping;
Run Code Online (Sandbox Code Playgroud)
在类的构造函数中,您可以相当简单地派生映射。这是假设As、Bs 和Cs 可以排序或散列。
使用这种数据结构,您可以在该类上编写所需的任何查询方法,并且实现应该始终非常简单和快速。
向元组数组添加新元素很简单。映射本质上只是允许快速查找的缓存。A如果一个实例或B可能C位于多个元组中,您可能必须映射到一个vectorof ,那么事情会变得更加棘手size_t。
在这个设计中添加D也相当简单。
如果您需要一些关系来没有您可以替换的类tuple之一variant。