gpt4 book ai didi

c++ - 在 C++ 中关联 3 个事物的最佳方式

转载 作者:可可西里 更新时间:2023-11-01 17:56:37 25 4
gpt4 key购买 nike

在我的 C++ 应用程序中,我遇到了一个问题,我需要关联 3 个东西并查找它们或遍历任何一列。

假设我有 3 个类 A、B、C,并且 A 可能是 B/C 对的两个或三个组合。我希望能够找到与 B 关联的所有 A、每个 A 的所有 B-C 对或给定 A 和 C 的每个 B。

除了有一个 std::tuple vector 和对整个列表进行线性迭代之外,这对我来说并不明显,但我宁愿像访问哈希表一样。我想到的另一种方法是简单地制作多个A -> vector<pair<B,C>>的哈希表。 , B -> vector<pair<A,C> , 之类的东西,但维护起来似乎很头疼。

最佳答案

我以前写过代码来解决一个可能类似的问题,我是这样做的,结果还不错(到目前为止)。

在一些类中:

您可以存储元组 vector ,例如:

vector<tuple<A, B, C>> tuple_array;

以及简单指向元组索引的散列访问的映射,例如:

map<A, size_t> a_mapping;
map<B, size_t> b_mapping;
map<C, size_t> c_mapping;

在类的构造函数中,您可以非常简单地派生映射。这是假设 ABC 可以排序或散列。

使用这种数据结构,您可以在该类上编写您需要的任何查询方法,并且实现应该始终非常简单和快速。

向元组数组添加新元素很简单。映射本质上只是允许快速查找的缓存。如果实例 ABC 可能位于多个元组中,事情就会变得有点棘手,您可能必须映射到一个 size_t 的 vector

添加 D 在此设计中也相当简单。

如果您需要一些关系而不是其中一个类,您可以将 tuple 替换为 variant 可能。

关于c++ - 在 C++ 中关联 3 个事物的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40000505/

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