在C++中关联3件事的最好方法

Ste*_*eve 8 c++ stl

在我的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>之后,这样的事情,但它似乎是一个头痛的维护.

sji*_*sji 2

我之前已经编写过代码来解决可能类似的问题,并且我这样做了,效果还不错(到目前为止)。

在某些班级:

您可以存储 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